日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

python迷宫问题求最短路径_用栈求解迷宫问题的所有路径及最短路径程序

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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迷宫问题求最短路径_用栈求解迷宫问题的所有路径及最短路径程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。