Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 7862 | Accepted: 4615 |
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, };
Input
Output
Sample Input
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
Sample Output
(0, 0) (1, 0) (2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (3, 4) (4, 4)
bfs刷多了。。5分钟敲完1A
#include <cstdio> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> using namespace std; typedef struct node { int x,y,step,pre; }; node que[100010]; int s,e,ma[10][10],vis[10][10],ansx[100010],ansy[100010]; int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; void bfs() { s=0;e=0;int pos; vis[0][0]=1; node t,v; t.x=0;t.y=0;t.pre=0;t.step=0; que[e++]=t; while(s<e) { v=que[s];pos=s;s++; if(v.x==4&&v.y==4) { int tem=pos,p=0; for(int i=0;i<=v.step;i++) { ansx[p]=que[tem].x;ansy[p++]=que[tem].y; tem=que[tem].pre; } for(int i=p-1;i>=0;i--) cout<<"("<<ansx[i]<<", "<<ansy[i]<<")"<<endl; return ; } for(int i=0;i<4;i++) { t.x=v.x+dir[i][0]; t.y=v.y+dir[i][1]; if(0<=t.x&&t.x<5&&0<=t.y&&t.y<5&&!vis[t.x][t.y]&&!ma[t.x][t.y]) { vis[t.x][t.y]=1; t.pre=pos; t.step=v.step+1; que[e++]=t; } } } } int main() { int i,j; memset(vis,0,sizeof(vis)); for(i=0;i<5;i++) for(j=0;j<5;j++) cin>>ma[i][j]; bfs(); return 0; }
POJ 3984-迷宫问题--BFS+回溯路径,布布扣,bubuko.com
原文:http://blog.csdn.net/qq_16255321/article/details/38560915