關於迷宮最短路徑問題及解決

2021-09-25 19:35:33 字數 1970 閱讀 1982

問題:

迷宮問題:求出從入口到出口的最短路徑。

設定乙個陣列mg表示迷宮,方塊為0表示對應方塊是通道,為1時表示對應方塊為牆:

//m=8,n=8

int mg[m+2][n+2]=,,,

,,,,

,,};c語言實現的乙個佇列的簡單應用,使用佇列尋找迷宮某兩個位置之間的最短路徑,

在程式執行時可以任意在迷宮中選擇起點和終點,查詢其最短路徑

mazepath.h

#ifndef mazepath_h_included

#define mazepath_h_included

#include #include #define maxsize 200

//定義佇列結構體

typedef struct

box;

//定義佇列型別

typedef struct

qutype;

//定義佇列變數

qutype qu;

//佇列初始化

void initqu(qutype* qu);

//佇列判空

int isempty(qutype qu);

//進隊

int enqu(qutype* qu,int i,int j,int pre);

//出隊

int dequ(qutype* qu,int* i,int* j);

//列印路徑

int print(qutype* qu,int qufront);

//尋找迷宮路徑

int mgpath(qutype qu,int xi,int yi,int xe,int ye);

#endif // mazepath_h_included

mazepath.c

#include #include #include "mazepath.h"

//編輯迷宮地圖,對此陣列進行修改即可改變迷宮形狀

int mg[10][10]=,,,

,,,,

,,};//佇列初始化

void initqu(qutype* qu)

//佇列判空

int isempty(qutype qu)

//進隊

int enqu(qutype* qu,int i,int j,int pre)

//出隊

int dequ(qutype* qu,int* i,int* j)

//列印路徑

int print(qutype* qu,int qufront)

while (k!=0);

printf("迷宮路徑如下:\n");

k=0;

while (k<=qufront) //正向搜尋到pre為-1的方塊,即構成正向的路徑

k++;

}printf("\n");

return 0;

}//尋找迷宮路徑

int mgpath(qutype qu,int xi,int yi,int xe,int ye)

for(di = 0;di < 4; di++ )

if(mg[i][j] == 0)}}

return 0;

}

main.c

#include #include #include "mazepath.h"

#include "mazepath.c"

int main()

printf("\n");

}initqu(&qu);

printf("\n請輸入起始點座標:");

scanf("%d%d",&i,&j);

printf("\n請輸入終點座標:");

scanf("%d%d",&x,&y);

mgpath(qu,i,j,x,y);

return 0;

}

迷宮最短路徑問題

問題描述 給定乙個迷宮和乙個起點乙個終點,求起點到終點的最短路徑長度。sample input 說明 5行5列的迷宮,為牆,為路,起點為 0,3 終點為 4,4 sample output 若不可達輸出 1 解答 用bfs的方法,借助乙個佇列實現。1 include2 include3 includ...

迷宮問題 最短路徑問題

給定乙個 n nn n 的二維陣列,如下所示 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。資料保證至少存在一條從左上角走到右下角的路徑。輸入格式 第一行包含整數 n。接下來 nn 行,每行...

迷宮最短路徑

include include using namespace std const int max n 100,max m 100 const int inf 100000000 使用pair表示狀態時,使用typedef會更加方便一些 typedef pairp 輸入 char maze max ...