求java实现矩阵图上任意两点的最短路径源码
来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/04/28 21:28:53
求java实现矩阵图上任意两点的最短路径源码
基本要求
以矩阵表示地图,
{1,1,1,1,1,1,1,1,1,1,1 }
{1,0,1,0,1,0,0,0,0,0,1 }
{1,0,1,0,0,0,1,0,1,1,1 }
{1,0,0,0,1,0,1,0,0,0,1 }
{1,0,1,1,0,0,1,0,0,1,1 } 0代表可以通过,1代表不可通过
{1,0,1,0,1,1,0,1,0,0,1 }
{1,0,0,0,0,0,0,0,1,0,1 }
{1,0,1,0,1,0,1,0,1,0,1 }
{1,0,0,1,0,0,1,0,1,0,1 }
{1,1,1,1,1,1,1,1,1,1,1 }
可以任意设定起点和终点,可以任意设定地图,输出路径和步数.
比如我要找从右下角的那个1到矩阵第三行第4列的那个元素的最短路径,我想要的是java源代码,最好能附上一些解释.想了好久,没想出来,
基本要求
以矩阵表示地图,
{1,1,1,1,1,1,1,1,1,1,1 }
{1,0,1,0,1,0,0,0,0,0,1 }
{1,0,1,0,0,0,1,0,1,1,1 }
{1,0,0,0,1,0,1,0,0,0,1 }
{1,0,1,1,0,0,1,0,0,1,1 } 0代表可以通过,1代表不可通过
{1,0,1,0,1,1,0,1,0,0,1 }
{1,0,0,0,0,0,0,0,1,0,1 }
{1,0,1,0,1,0,1,0,1,0,1 }
{1,0,0,1,0,0,1,0,1,0,1 }
{1,1,1,1,1,1,1,1,1,1,1 }
可以任意设定起点和终点,可以任意设定地图,输出路径和步数.
比如我要找从右下角的那个1到矩阵第三行第4列的那个元素的最短路径,我想要的是java源代码,最好能附上一些解释.想了好久,没想出来,
我用的是递归调用方法,有个小问题就是在打印步数的时候是返向的,原因是就是程序不断的调用自己,到最后判断基值位准退出调用.这才开始从栈里取出方法进行执行的原因.代码欣赏:public static int step = 1;public static StringBuffer printStep = new StringBuffer(); public static int[][] maze ={{1,1,1,1,1,1,1,1,1,1,1}, {1,0,1,0,1,0,0,0,0,0,1 }, {1,0,1,0,0,0,1,0,1,1,1 }, {1,0,0,0,1,0,1,0,0,0,1 }, {1,0,1,1,0,0,1,0,0,1,1 },// 0代表可以通过,1代表不可通过 {1,0,1,0,1,1,0,1,0,0,1 }, {1,0,0,0,0,0,0,0,1,0,1 }, {1,0,1,0,1,0,1,0,1,0,1 }, {1,0,0,1,0,0,1,0,1,0,1 }, {1,1,1,1,1,1,1,1,1,1,1 } };public static void main(String[] args) {int i, j; //循环记数变量Sample.way(1, 1);//二维数组起始值从下标1,1开始System.out.println("起点从坐标 x = 1, y = 1开始");System.out.println("终点坐标是 x = 8, y = 9结束");System.out.println("这是迷宫图表");System.out.println(" 0 1 2 3 4 5 6 7 8 9 10");System.out.println(" +---+---+---+---+---+---+---+---+---+---+---+---+---+");for(i = 0; i < 10; i++){System.out.print(" " + i + "‖");for(j = 0; j < 11; j++)System.out.print("-" + maze[i][j] + "-‖");System.out.println("");System.out.println(" +---+---+---+---+---+---+---+---+---+---+---+---+---+");} //打印显示步数System.out.print(printStep.toString());} public static boolean way(int x, int y){if(maze[8][9] == 2)//代表递归终止条件(也就是当走出出口时标记为 2)return true;else{if(maze[y][x] == 0){maze[y][x] = 2;/** 下面if判断条件代表当前坐标为基点,* 根据判断对当前位置进行递归调用:如:* 往上、往右上、往右、往右下、往下、* 往左下、往左、往左上的坐标是否可走,* 判断是否可走的返回条件是:* 2代表可通过、1代表不能通过、3表示已经走过,但是未能走通.*/if(way(x, y - 1)){printStep.append("第 " + step + " 步的所走的位置是 x = " + x + " y = " + y + "\n");step++;return true;}else if(way(x + 1, y - 1)){printStep.append("第 " + step + " 步的所走的位置是 x = " + x + " y = " + y + "\n");step++;return true;}else if(way(x + 1 , y)){printStep.append("第 " + step + " 步的所走的位置是 x = " + x + " y = " + y + "\n");step++;return true;}else if(way(x + 1, y + 1)){printStep.append("第 " + step + " 步的所走的位置是 x = " + x + " y = " + y + "\n");step++;return true;}else if(way(x, y + 1)){printStep.append("第 " + step + " 步的所走的位置是 x = " + x + " y = " + y + "\n");step++;return true;}else if(way(x - 1, y + 1)){printStep.append("第 " + step + " 步的所走的位置是 x = " + x + " y = " + y + "\n");step++;return true;}else if(way(x - 1, y)){printStep.append("第 " + step + " 步的所走的位置是 x = " + x + " y = " + y + "\n");step++;return true;}else if(way(x - 1, y - 1)){printStep.append("第 " + step + " 步的所走的位置是 x = " + x + " y = " + y + "\n");step++;return true;}else{maze[y][x] = 3;return false;}}elsereturn false;}}复制代码前需要楼主自己创建个 类 Sample.way(1, 1);这句代码是我的类的静态调用,改下XXXXX.way(1, 1);XXXXX代表你创建的类.下面是这个程序运行后的截图
求java实现矩阵图上任意两点的最短路径源码
matlab中将任意矩阵转换成上三角矩阵的源码
matlab求两组数据任意两点间最短距离及其坐标,要详细的matlab源码
java如何获取汉字的拼音字母?请帮忙讲一下实现原理,最好能贴出java源码
求一个地图矩阵int Map[20][20]上两个点之间最短路径的算法!C/C++语言.地图元素map[][]=0表示可
已知地球上任意两点的经纬度,求它们之间最短圆弧的长度如何求
如何用粒子群算法实现有障碍物时的最短路径规划(从起点到终点路径最短,并避开障碍物),用Matlab实现!
用java求任意一个字符串中英文单词的总数,最长单词的长度,最短单词的长度
以邻接表作存储结构实现求从源点到其余各顶点的最短路径的Dijkstra算法
java实现矩阵相加、相乘,判断是否上(下)三角矩阵、对称矩阵、相等的算法
跪求迷宫最短路径 迷宫最短路径 从一个迷宫的入口到出口找出一条最短路经.用一个二维数
最短路径的Dijkstra算法思路