POJ-3984 迷宫问题 (BFS)

-
题意:有一个\(5\)X\(5\)的\(01\)图,输出从左上角走到右下角的最短路径.
-
题解:基础的bfs,这里困难的是如何输出这个最短路径,我们可以用一个结构体来存点和路径,我们每次向外去拓展的时候,如果满足条件,那么就让这个点的路径继承上个点的路径,这样当我们走到右下角的时候,直接输出路劲然后return即可.
-
代码:
struct misaka{ int x,y; int cnt; PII path[50]; }e; int g[10][10]; bool st[10][10]; int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0}; void bfs(){ me(st,false,sizeof(st)); queue<misaka> q; e.x=0,e.y=0; e.cnt=1; e.path[e.cnt]={0,0}; q.push(e); while(!q.empty()){ misaka tmp=q.front(); q.pop(); int x=tmp.x; int y=tmp.y; int cnt=tmp.cnt; if(x==4 && y==4){ for(int i=1;i<=cnt;++i){ printf("(%d, %d)\n",tmp.path[i].fi,tmp.path[i].se); } return; } for(int i=0;i<4;++i){ int tx=x+dx[i]; int ty=y+dy[i]; if(tx>=0 && tx<5 && ty>=0 && ty<5 && g[tx][ty]==0 && !st[tx][ty]){ e.x=tx; e.y=ty; e.cnt=++cnt; e.path[e.cnt]={tx,ty}; q.push(e); st[tx][ty]=true; } } } } int main() { //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); for(int i=0;i<5;++i){ for(int j=0;j<5;++j){ scanf("%d",&g[i][j]); } } bfs(); return 0; }
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮

浙公网安备 33010602011771号