import java.util.Arrays;
import java.util.Random;
import java.util.Stack;
/**
* 创建一个二维数组,每一个元素是一个正数。<br>
* 进行走位,路线是从数组左上角走到右下角。<br>
* 每次只能向右或向下走。<br>
* 不能走出矩阵。<br>
* 走一步就会加上当前数组中元素的数据。<br>
* 求路线,使得和最小。
*
* @author 刘胜军
*/
public class Seven {
public static void main(String[] args) {
/********************************************/
int[][] num = getMiGong();// 获取迷宫
Stack<Object[]> end = new Stack<Object[]>();// 保存所有通路栈
Stack<Position> temp = new Stack<Position>();// 保存当前走过的路的坐标的栈
new Seven().getRu(0, 0, num.length - 1, num[0].length - 1, temp, end);// 计算
/**************** 打印所有通路 ******************/
for (Object[] obj : end) {
System.out.println(Arrays.toString(obj));
}
/***************** 获取最小值 ******************/
int index_i = 0;// 当前最小值的下标
int index_sum = Integer.MAX_VALUE;// 记录当前最小值
for (int i = 0; i < end.size(); i++) {
int size = 0;
for (Object object : end.get(i)) {
size += num[((Position) object).row][((Position) object).col];
}
if (size <= index_sum) {
index_i = i;
index_sum = size;
}
}
System.out.println("最小权值为:" + index_sum);
System.out.println("最小权值坐标为:" + Arrays.toString(end.get(index_i)));
/********************************************/
}
/**
* 获取矩阵
*
* @return
*/
public static int[][] getMiGong() {
int x = new Random().nextInt(9) + 1;
int y = new Random().nextInt(9) + 1;
int[][] num = new int[x][y];
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
num[i][j] = new Random().nextInt(100);
}
}
// int[][] num = { { 1, 1, 1, 1, 1 },
// int[][] num = { { 1, 0, 1, 1, 1 }, { 1, 0, 1, 1, 1 },
// { 1, 0, 0, 0, 1 }, { 1, 1, 0, 0, 1 }, { 1, 1, 1, 1, 1 } };
// int[][] num = { { 1, 1, 1, 1, 1, 1, 1, 1, 1 },
// { 1, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 1, 1, 0, 1, 1, 0, 1 },
// { 1, 0, 1, 0, 0, 1, 0, 0, 1 }, { 1, 0, 1, 0, 1, 0, 1, 0, 1 },
// { 1, 0, 0, 0, 0, 0, 1, 0, 1 }, { 1, 1, 0, 1, 1, 0, 1, 1, 1 },
// { 1, 0, 0, 0, 0, 0, 0, 0, 1 } };
return num;
}
/**
* 计算所有通路
*
* @param start_x
* 开始坐标x
* @param start_y
* 开始坐标y
* @param end_x
* 结束坐标x
* @param end_y
* 结束坐标y
* @param temp
* 保存当前走过的路的栈
* @param end
* 保存通路的栈
*/
public void getRu(int start_x, int start_y, int end_x, int end_y,
Stack<Position> temp, Stack<Object[]> end) {
temp.push(new Position(start_x, start_y));// 当前点入栈
if (start_x == end_x && start_y == end_y) {// 判断当前点是不是结束点
end.push(temp.toArray());// 如果是,说明当前是一条通路,这个时候保存当前通路保存到通路的栈中
temp.pop();// 当前点出栈
return;// 返回上一个点(最后一个点的话,退出当前方法)
}
if (start_x + 1 <= end_x)
getRu(start_x + 1, start_y, end_x, end_y, temp, end);
if (start_y + 1 <= end_y)
getRu(start_x, start_y + 1, end_x, end_y, temp, end);
temp.pop();// 当前点出栈
return;// 返回上一个点(最后一个点的话,退出当前方法)
}
/**
* 自定义点坐标
*
* @author 刘胜军
*/
class Position {
public int row;
public int col;
public Position(int row, int col) {
this.row = row;
this.col = col;
}
public int getRow() {
return row;
}
public int getCol() {
return col;
}
@Override
public String toString() {
return "(" + row + "," + col + ")";
}
}
}
分享到:
相关推荐
用数组创建函数创建一个二维数组显示件,成员为: 4 5 6 1 2 3 3 4 5 6 1 2 2 3 4 5 6 1 1 2 3 4 5 6 编程将上述创建的数组转置为: 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 1 5 6 1 2 6 1 2 3
一维数组转二维数组
一维数组是基本的数组,多维数组是在一维数组的基础上创建的。一维数组的创建过程如下。 (1)创建数组框架。在前面板窗口控件选板中选择控件“新式→数组、矩阵与簇→数组,置于...如图3所示即为创建一个数值型控件
用C++语音实现一维数组二维数组写入txt,从txt中读取数据存到一维数组、二维数组,数组用指针表示
使用Excel两个一维数组构造二维数组.rar,本例所示的Sheet1工作表已经定义了两个一维数组,利用公式对这连个数组进行加法运算,可以生成一个新的二维数组。
二维数组按行求平均值,形成一个新的一维数组
将labview内二维数组方便的转化为一维数组使用
C# json 一维数组 和 二维数组的转换 写的非常详细,对大家有帮助
C语言程序设计-求出二维数组周边元素之和,作为函数值返回;二维数组的值在主函数中赋予;
C#窗体二维数组求最大值最小值
二维数组的声明和使用ppt介绍很快可以上手练习和理解用的
编写一个c程序函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。(数组维数用宏定义)
public class Test { // 二维数组冒泡排序 public static void main... //一维数组的长度(二维数组的列*宽) System.out.println("原始二维数组:"); //打印原始二维数组 for(i=0;i;i++) { for(j=0;j;j++) {
通过vue解析表头合并的表格,后台返回的数据格式为[{name:aa,list:[{value:100}]}] 通过table与v-for组合循环数据达到目的。 vue 表头合并数据解析 vue 二维数组解析 vue 二维list解析 vue table+v-for
java 将一个二维数组存到txt文件里,然后再读取。可运行
实现一个“可变长二维数组”,这个二维数组的行数可由输入决定,每行的元素个数仍可由输入决定。每个数组元素值都是1. 执行结果如下: 请输入行数: 5 请输入第1行的元素个数: 20 请输入第2行的元素个数: 34 请...
二维数组求数组中的最大数的横竖位置 可以直接在c6.0上用的
以 动 态 的 的 形 式 对 二 维 数 组 进 行 创 建 。
七段二进制数码管显示二维数组 方法高级
CStringArray二维数组CStringArray二维数组CStringArray二维数组CStringArray二维数组CStringArray二维数组CStringArray二维数组CStringArray二维数组CStringArray二维数组