一个二位数组,每个元素都可以往上下左右四个方向走,寻找最长递增路径。如下图所示,最长递增路径即红色字体路径。白纸写代码。
程序员文章站
2022-06-11 16:48:42
1 2 3 4 5 2 5 4 3 2 3 6 5 1 2 4 2 6 3 7 5 3 3 6 8 package com.trs.codetool.core; /** * @author zheng.changgang * @date 2019-12-20 09:56 * 一个二位数组,每个元素都 ......
1 | 2 | 3 | 4 | 5 |
2 | 5 | 4 | 3 | 2 |
3 | 6 | 5 | 1 | 2 |
4 | 2 | 6 | 3 | 7 |
5 | 3 | 3 | 6 | 8 |
package com.trs.codetool.core; /** * @author zheng.changgang * @date 2019-12-20 09:56 * 一个二位数组,每个元素都可以往上下左右四个方向走,寻找最长递增路径。如下图所示,最长递增路径即红色字体路径。白纸写代码。 */ public class longway { static int maxway = 0; static int[][] result = new int[5][5]; public static void main(string[] args) { int[][] nums = {{1,2,3,4,5}, {2,5,4,3,2}, {3,6,5,1,2}, {4,2,6,3,7}, {5,3,5,6,8}}; // 0 未拜访 1 已拜访 int[][] visited = new int[5][5]; longway(0,0,0,nums,visited); system.out.println("最长路径:"+maxway); } /** * 得到最长的路径 * @param nums * @param visited */ private static void longway(int x,int y,int way,int[][] nums, int[][] visited) { int nextx = x+1; int nexty = y+1; int prex = x-1; int prey = y-1; way +=1; result[x][y] = nums[x][y]; visited[x][y] = 1; if(maxway < way) { maxway = way; } system.out.println(x+"==="+y +"===="+ nums[x][y]+"当前次数"+way); if(x > 0 && nums[x][y]+1 == nums[prex][y]) { longway(prex,y,way,nums,visited); } if(y>0 && nums[x][y]+1 == nums[x][prey]) { longway(x,prey,way,nums,visited); } if(x<nums.length-1 && nums[x][y]+1 == nums[nextx][y]) { longway(nextx,y,way,nums,visited); } if(y<nums.length-1 && nums[x][y]+1 == nums[x][nexty]) { longway(x,nexty,way,nums,visited); } visited[x][y] = 0; } private static void printresult(int[][] result) { for(int i=0;i<result.length;i++) { for(int j=0;j<result.length;j++) { system.out.print(result[i][j]+" "); } system.out.println(); } } }
上一篇: .NetCore3.0短网址项目