求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代表不

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 00:13:14
求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

求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代表不
求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源代码,最好能附上一些解释.想了好久,没想出来,

求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代表不

我用的是递归调用方法,有个小问题就是在打印步数的时候是返向的,原因是就是程序不断的调用自己,到最后判断基值位准退出调用.这才开始从栈里取出方法进行执行的原因.

代码欣赏:

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;

}

}else

return false;

}

}

复制代码前需要楼主自己创建个 类 

Sample.way(1, 1);这句代码是我的类的静态调用,改下XXXXX.way(1, 1);

XXXXX代表你创建的类.

下面是这个程序运行后的截图

求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代表不 图论中求任意两点之间的最短路径用lingo怎么实现,求lingo源程序 怎样在地图上选取两点查询最短路径 求从任意一个顶点Vi出发,对给出的图,求到达任意顶点Vj(ij)的所有最短路径. matlab floyd 算法注释function [D,R]=floyd(A) %用floyd算法实现求任意两点之间的最短路程.可以有负权 %参数D为连通图的权矩阵 % A=[0 2 8 1 inf inf inf inf % 2 0 6 inf 1 inf inf inf % 8 简单实现任意两个地点之间最短路径查询(具体见图)数据结构要选用邻接矩阵或邻接表来实现 求用matlab解最短路问题的程序要用Dijkstra算法找出任意两点间的最短路径.希望用MATLAB或LINGO编程求解.求程序, 如何让c语言实现这个这个程序呀?有解题思路,有例题,求结果?急,Floyed算法使用图的邻接矩阵A 进行n次迭代来计算每对顶点间的最短路径,迭代过程中得到一个矩阵序列A0 ,A1 ,⋯,An ,矩阵元素A 最短路径Floyd算法有一个无向加权图,利用Floyd算法可以求出任意两个节点之间的最短路径.但是,如果需要找出一个节点,使其距离图中其他所有节点的路径之和最短.除了枚举所有的点之外,有没 关于球面:为什么球面上任意两点连线中球面距离最短?求证明 用java求任意一个字符串中英文单词的总数,最长单词的长度,最短单词的长度 跪求解释 Matlab中graphshortestpath的具体用法 需要什么参数,矩阵,得到什么结果?是一个最短路径问题,据说是封装好的floyd,Dijkstra 算法 最短路径问题是有权还是没权问题呢? 关于欧几里德空间的一个问题想象一个二维动物,它只能在二维曲面上运动并只能感觉到它所处的二维世界.假定它能够测量曲面上任意路径的长度,并称两点间长度最短的路径为直线距离.它有 求一个地图矩阵int Map[20][20]上两个点之间最短路径的算法!C/C++语言.地图元素map[][]=0表示可以通过的 寻求两点之间最短、最快、景点最多的路径用什么技术? 以邻接表作存储结构实现求从源点到其余各顶点的最短路径的Dijkstra算法 勾股定理与长方体展开图的最短路径问题 用vb.netl编写的floyd算法求两点间的最短路径,怎么输出path经过的顶点序列?