定义一个m行n列的二维数组a,数组中的每个位置都放入的是1到9之间的随机整体数,寻找一条从左上角a[0][0]到右下角arr[m-1][n-1]的路线,使得沿路经过的数组中的整数之和最小。

tech2023-11-28  74

import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class Demo { public static void main(String[] args) { // 定义一个二维数组 int[][] game = new int[5][6]; // 给二维数组添加值 for (int i = 0; i < game.length; i++) { for (int j = 0; j < 6; j++) { game[i][j] = (int) (Math.random() * 8) + 1; } } // 定义一个起点变量 int chess = game[0][0]; // 定义一个接收我经过的路段的集合 LinkedList<Integer> path = new LinkedList<Integer>(); //给数组添加起点值 path.add(game[0][0]); // 定义两个我现在的位置变量,默认在起点 int m = 0; int n = 0; // 定义一个临时存放3个数的数组 int[] a = new int[3]; while (m <= 4&&n<=5) { if (m<4&&n < 5) { a[0] = game[m][n + 1]; a[1] = game[m + 1][n]; a[2] = game[m + 1][n + 1]; int min = a[0]; int index = 0; for (int i = 0; i < a.length; i++) { if (min > a[i]) { min = a[i]; index = i; } } if (index == 0) { path.add(a[0]); n = n + 1; } else if (index == 1) { path.add(a[1]); m += 1; } else { path.add(a[2]); n += 1; m += 1; } }else if(m<4&&n==5){//当走到最右边 path.add(game[m+1][n]); m+=1; }else if(n<5&&m==4){//当走到最底层 path.add(game[m][n+1]); n++; }else{//当走到终点跳出循环 break; } } // 打印二维数组 for (int i = 0; i < game.length; i++) { for (int j = 0; j < 6; j++) { System.out.print(game[i][j] + " "); } System.out.println(); } // 遍历集合 System.out.println("则最小和是:"); for (int i = 0; i < path.size(); i++) { //当打印到最后一个值的时候不要"+"号 if(i == path.size()-1){ System.out.print(path.get(i)); break; } System.out.print(path.get(i)+"+"); } } }
最新回复(0)