poj3984——迷宫问题(BFS)

来源:互联网 发布:天猫美工和淘宝美工 编辑:程序博客网 时间:2024/06/10 03:59

基础地不能再基础地BFS,记录路径也不是很麻烦

#include <iostream>#include <cstring>#include <string>#include <vector>#include <queue>#include <cstdio>#include <algorithm>#define INF 0x3f3f3f3f#define MAXN 100010using namespace std;int mp[10][10],vis[10][10];int dx[]={0,0,1,-1};int dy[]={1,-1,0,0};struct Node{    int x,y;    int stepx[30],stepy[30],cnt;};void bfs(){    Node start;    start.x=0,start.y=0,start.cnt=0;    queue<Node> q;    q.push(start);    while(!q.empty())    {        Node tmp=q.front(),tmp1;        q.pop();        if(tmp.x==4&&tmp.y==4)        {            printf("(0, 0)\n");            for(int i=0;i<tmp.cnt;++i)                printf("(%d, %d)\n",tmp.stepx[i],tmp.stepy[i]);            return;        }        tmp1=tmp;        for(int i=0;i<4;++i)        {            tmp1.x=tmp.x+dx[i];            tmp1.y=tmp.y+dy[i];            if(tmp1.x>=0&&tmp1.x<=4&&tmp1.y>=0&&tmp1.y<=4&&!vis[tmp1.x][tmp1.y]&&mp[tmp1.x][tmp1.y]==0)            {                vis[tmp1.x][tmp1.y]=1;                tmp1.stepx[tmp1.cnt]=tmp1.x;                tmp1.stepy[tmp1.cnt++]=tmp1.y;                q.push(tmp1);            }        }    }}int main(){    for(int i=0;i<5;++i)        for(int j=0;j<5;++j)        scanf("%d",&mp[i][j]);    memset(vis,0,sizeof(vis));    bfs();    return 0;}
0 0