標籤:des style blog ar io color os sp for
Description
定義一個二維數組:
int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 0, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};
它表示一個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求編程式找出從左上方到右下角的最短路線。
Input
一個5 × 5的二維數組,表示一個迷宮。資料保證有唯一解。
Output
左上方到右下角的最短路徑,格式如範例所示。
Sample Input
0 1 0 0 00 1 0 1 00 0 0 0 00 1 1 1 00 0 0 1 0
Sample Output
(0, 0)(1, 0)(2, 0)(2, 1)(2, 2)(2, 3)(2, 4)(3, 4)(4, 4)
#include <cstdio>#include <cmath>#include <cstring>#include <ctime>#include <iostream>#include <algorithm>#include <set>#include <vector>#include <sstream>#include <queue>#include <typeinfo>#include <fstream>typedef long long ll;using namespace std;//freopen("D.in","r",stdin);//freopen("D.out","w",stdout);#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)#define maxn 100const int inf=0x7fffffff; //無限大struct dota{ int x; int y; int pre;} haha[1000];int dx[4]={1,-1,0,0};int dy[4]={0,0,1,-1};//int dp[10][10];int vis[50][50];void print(int x){ if(haha[x].pre!=-1) { print(haha[x].pre); printf("(%d, %d)\n",haha[x].x,haha[x].y); }}void bfs(int x,int y){ haha[0].x=x; haha[0].y=y; haha[0].pre=-1; int start=0; int fina=1; int m=1; while(start<fina) { for(int i=0;i<4;i++) { int a=haha[start].x+dx[i]; int b=haha[start].y+dy[i]; if(a<0||a>4) continue; if(b<0||b>4) continue; if(vis[a][b]==1) continue; fina++; vis[a][b]=1; haha[m].x=a; haha[m].y=b; haha[m++].pre=start; if(a==4&&b==4) { print(start); } } start++; }}int main(){ for(int i=0;i<5;i++) for(int j=0;j<5;j++) { cin>>vis[i][j]; } printf("(0, 0)\n"); bfs(0,0); printf("(4, 4)\n"); return 0;}
迷宮問題 類比隊列 廣度優先搜尋