迷宮的最短路線(bfs)
題目:給定乙個大小為n*m的迷宮。迷宮由通道和牆壁足證,每一步可以向鄰接的上下左右四格的通道移動。請求出從起點到終點所需要的最小步數。請注意,本體假定從起點一定可以移動到終點。
限制條件:n,m<100
思路:1.初始化迷宮maze[i][j],並對其每乙個位置附上乙個很大的值來表示狀態d[i][j](有沒有走過)。
2.取起點座標將其加入佇列que
3.用while迴圈體
1)取出隊首元素,並將其出隊(如果是終點,那直接break)
2)用for迴圈來遍歷上下左右4個方向,找出符合條件的座標,並把到該位置的距離確定到p的距離+1(不超出迷宮範圍,該座標還不是終點座標,該座標還沒有走過)
4.return d[gx][gy]
**:
#include #include using namespace std;
const int inf=100000000;
const int max_n=100,max_m=100;
int n,m;
int sx,sy;//起點座標
int gx,gy;//終點座標
char maze[max_n][max_m+1];//表示迷宮的字串的陣列
int d[max_n][max_m];//到各個位置的最短距離的陣列
int dx[4]=,dy[4]=;//4個方向移動的向量
typedef pairp; //使用pair表示狀態時,使用typedef會更加方便一些
void solve();
int bfsn();
int main()
else if (maze[i][j]=='g')
} solve();
return 0;
}void solve()
{ int res=bfsn();
cout<<"最短路徑是:"//把所有位置都初始化為inf
for (int i=0;i
本題應用了bfs(廣度優先搜尋),佇列,還應用了typedef,pair
關於typedef和pair,之後再說明
送快遞的最短路線
題目描述 某物流派送員p,需要給a b c d4個快遞點派送包裹,請問派送員需要選擇什麼的路線,才能完成最短路程的派送。假設如圖派送員的起點座標 0,0 派送路線只能沿著圖中的方格邊行駛,每個小格都是正方形,且邊長為1,如p到d的距離就是4。隨機輸入n個派送點座標,求輸出最短派送路線值 從起點開始完...
lintcode 騎士的最短路線
給定騎士在棋盤上的 初始 位置 乙個2進製矩陣 0 表示空 1 表示有障礙物 找到到達 終點 的最短路線,返回路線的長度。如果騎士不能到達則返回 1 如果騎士的位置為 x,y 他下一步可以到達以下這些位置 x 1,y 2 x 1,y 2 x 1,y 2 x 1,y 2 x 2,y 1 x 2,y 1...
演算法記錄 騎士的最短路線
給定騎士在棋盤上的 初始 位置 乙個2進製矩陣 0 表示空 1 表示有障礙物 找到到達 終點 的最短路線,返回路線的長度。如果騎士不能到達則返回 1 說明 如果騎士的位置為 x,y 他下一步可以到達以下這些位置 x 1,y 2 x 1,y 2 x 1,y 2 x 1,y 2 x 2,y 1 x 2,...