python迷宫问题求最短路径_用栈求解迷宫问题的所有路径及最短路径程序
目的:能將棧運用的更為熟練
實驗內容:求解迷宮問題程序,要求輸出如圖所示的迷宮的路徑,并求出第一條最短路徑的長度以及最短路徑。
設計的算法功能:
mgpath(int xi,int yi,int xe,int ye):求解迷宮問題,即輸出從入口(xi,yi)到出口(ye,xe)的全部路徑和最短路徑(包含最短路徑長度)。minlen記錄最短路徑長度,Path數組記錄最短路徑
dispapath():輸出一條路徑及其長度
dispminpath():輸出第一條最短路徑及其長度
具體程序:
#include
#define M 4 //行數
#define N 4 //列數
#define MaxSize 100 //棧最多元素
int mg[M+2][N+2] = {
{1,1,1,1,1,1},{1,0,0,0,1,1},{1,0,1,0,0,1},{1,0,0,0,1,1},{1,1,0,0,0,1},{1,1,1,1,1,1}
}; //用mg數組作為迷宮數組,定義迷宮的基本框架
struct
{
int i,j;
int di;
}St[MaxSize],Path[MaxSize],LenMax[MaxSize]; //定義棧和存放最短路徑的數組
int top = -1; //棧頂指針
int count = 1; //路徑數計數
int minlen = MaxSize; //最短路徑長度
void dispapath() //輸出一條路徑并求最短路徑
{
int k;
printf(" %5d: ",count++); //輸出第count條路徑
for(k=0;k<=top;k++)
printf("( %d, %d)",St[k].i,St[k].j);
printf("\n");
if(top+1
{
for(k=0;k<=top;k++) //將最短路徑存放在Path中
Path[k] = St[k];
minlen = top+1; //將最短路徑長度存放在minlen中
}
}
void dispminpath()
{
printf("最短路徑如下:\n");
printf("長度:%d\n",minlen);
printf("路徑:");
for(int k = 0;k
printf("(%d, %d)",Path[k].i,Path[k].j);
printf("\n");
}
void mgpath(int xi,int yi,int xe,int ye) //求迷宮路徑
{
int i,j,i1,j1,di;
bool find;
top++; //進棧
St[top].i = xi;
St[top].j = yi;
St[top].di = -1; //初始方塊進棧
mg[xi][yi] = -1;
while(top>-1) //棧不空是循環
{
i = St[top].i;j = St[top].j; //取棧頂方塊(i,j)
di = St[top].di;
if(i == xe&&j == ye) //找到出口
{
dispapath(); //輸出一條路徑
mg[i][j]=0; //讓出口變為其他路徑可走方塊
top--; //出口退棧,即回退一個方塊
i = St[top].i;j = St[top].j;
di = St[top].di; //讓棧頂方塊變為當前方塊
}
find = false; //找下一個可走方塊 (i1,j1)
while(di<4&&!find)
{
di++;
switch(di)
{
case 0:i1 = i-1;j1 = j; break;
case 1:i1 = i; j1 = j+1;break;
case 2:i1 = i+1;j1 = j; break;
case 3:i1 = i, j1 = j-1;break;
}
if(mg[i1][j1] == 0) find = true;
}
if(find) //找到下一個課走方塊(i1,j1)進棧
{
St[top].di = di; //修改原棧頂元素的di值
top++;
St[top].i = i1;
St[top].j = j1;
St[top].di = -1; //下一個可走方塊(i1,j1)進棧
mg[i1][j1] = -1; //避免重復走到該方塊
}
else
{
mg[i][j] = 0; //沒有路徑可走,則(i,j)方塊退棧
top--;
}
}
dispminpath(); //輸出最短路徑
}
int main()
{
printf("迷宮所有的路徑如下:\n");
mgpath(1,1,M,N);
return 1;
}
總結
以上是生活随笔為你收集整理的python迷宫问题求最短路径_用栈求解迷宫问题的所有路径及最短路径程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个性签名心情短语
- 下一篇: java连接mongodb_java连接