POJ 3984 迷宫问题 (BFS+打印路径坐标

    科技2024-12-05  35

    题目链接

    题目大意:

    一个 5 * 5 的迷宫,从左上角走到右下角,求最短路径 并输出

    解题思路:

    不会呀  然后翻了无数题解都是 记录前驱 然后 递归逆向打印

    代码如下:

    #include<iostream> #include<cstring> using namespace std; int m[6][6]; bool vis[110][110]; int p[110]; int head; int tail; int d[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; struct node { int x; int y; }a[110]; int print(int x) { if(p[x]!=-1) { print(p[x]); } printf("(%d, %d)\n",a[x].x,a[x].y); return 0; } void bfs() { while(head<tail) { for(int i=0;i<4;i++) { int xx=a[head].x+d[i][0]; int yy=a[head].y+d[i][1]; if(xx<0||xx>=5||yy<0||yy>=5) continue; if(m[xx][yy]==1) continue; if(vis[xx][yy]==false) { a[tail].x=xx; a[tail].y=yy; vis[xx][yy]=true; p[tail]=head; tail++; } if(xx==4&&yy==4) { print(tail-1);//tail 是指向最后一位的下一个位置(上面tail++了) //所以这里需要-1 return; } } head++; } } int main() { int i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) cin>>m[i][j]; head=0; tail=0; a[tail].x=0; a[tail].y=0; vis[tail][tail]=true; p[tail]=-1; tail++; bfs(); return 0; }

     

    Processed: 0.011, SQL: 8