首页 > 代码库 > POJ 3984
POJ 3984
通过BFS解决迷宫问题,再利用一个last[]数组由出口倒置回来不断找到上一个点的位置,最终返回入口,而得到这条最短路径
代码:
1 #include<iostream> 2 #include<string.h> 3 #include<queue> 4 5 using namespace std; 6 7 int map[5][5]; 8 int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; 9 int visit[5][5]={0};10 int last[25];11 int ans[25];//用last得到的最短路径是倒置的,通过last再倒回来;12 13 struct Node{14 int x,y;15 int logo;16 }node[25];17 18 int main()19 {20 for(int i=0;i<5;i++)21 {22 for(int j=0;j<5;j++)23 {24 cin>>map[i][j];25 node[5*i+j].x=i;26 node[5*i+j].y=j;27 node[5*i+j].logo=map[i][j];28 }29 }30 31 queue<Node> Q;32 33 Q.push(node[0]);34 35 while(!Q.empty()){36 Node a=Q.front();37 visit[a.x][a.y]=1;38 //cout<<a.x<<‘\t‘<<a.y<<endl;39 Q.pop();40 for(int i=0;i<4;i++)41 {42 Node next;43 next.x=a.x+dir[i][0];44 next.y=a.y+dir[i][1];45 next.logo=node[5*next.x+next.y].logo;46 if(next.x>=0&&next.x<5&&next.y>=0&&next.y<5&&next.logo==0&&visit[next.x][next.y]==0)47 {48 Q.push(next);49 last[next.x*5+next.y]=a.x*5+a.y;//last得到上一个节点的位置所在50 }51 }52 }53 54 int p=24,top=0;55 while(true)56 {57 ans[top++]=p;58 if(p==0) break;59 p=last[p];60 }61 62 while(top>0)63 {64 --top;65 cout<<"("<<ans[top]/5<<", "<<ans[top]%5<<")"<<endl;66 }67 68 return 0;69 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。