找出矩阵中的最短路径

本文关键字:最短路径 | 更新日期: 2023-09-27 18:14:35

我有一个由0和1填充的矩阵,我想找到矩阵中两个点之间的最短点。我发现这个源代码解决了我的问题,但它只显示在矩阵的结果通过填充与数字100的路径,我想得到一个数组的结果。下面是一个矩阵的例子:

0   0   0   1   0
0   1   1   1   1
0   0   0   0   1
1   1   1   0   0

起始点为(0,0),目标点为(4,3)程序以这种格式显示结果:

100 0   0   1   0
100 1   1   1   1
100 100 100 100 1
1   1   1   100 100 

但是我想以这种格式得到结果:

(0,0), (0,2), (3,2), (3,3), (4,3)

找出矩阵中的最短路径

看下面的代码

//create an array(maze) for solution
294              int[,] iMazeSolved=new int[iRows,iCols];
295              for(int i=0;i<iRows;i++)
296                  for(int j=0;j<iCols;j++)
297                      iMazeSolved[i,j]=m_iMaze[i,j];
298  
299              //make a path in the Solved Maze
300              iCurrent=iStop;
301              ChangeNodeContents(iMazeSolved, iCurrent, iPath);
302              for(int i=iFront; i>=0; i--)
303              {
304                  if (Queue[i]==iCurrent)
305                  {
306                      iCurrent=Origin[i];
307                      if (iCurrent==-1)       // maze is solved
308                          return ( iMazeSolved );
309                      ChangeNodeContents(iMazeSolved, iCurrent, iPath);
310                  }
311              }
​

iMazeSolved是包含解决方案的数组。ChangeNodeContents是路径被替换为1000之后的解决方案。你只需要数组iMazeSolved