POJ 3984 迷宫问题

来源:互联网 发布:java正则表达式分组 编辑:程序博客网 时间:2024/06/06 09:23

【题意】中文题。。。

【思路】简单bfs加路径记录。

【AC代码】

#include <set>#include <map>#include <queue>#include <stack>#include <cstring>#include <vector>#include <cstdio>#include <iostream>#include <algorithm>using namespace std;struct node{    int x,y;    node(){}    node(int x,int y):x(x),y(y){}}ans[30][30];int dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}};int maze[5][5];int vis[5][5];stack<node>S;void bfs(){    queue<node>qu;    qu.push(node(maze[0][0],maze[0][0]));    vis[0][0]=1;    while(!qu.empty()){        node tmp = qu.front();        qu.pop();        if(tmp.x==4&&tmp.y==4) return ;        for(int i=0; i<4; i++){            int dx = tmp.x+dir[i][0];            int dy = tmp.y+dir[i][1];            if(dx>=0&&dx<5&&dy>=0&&dy<5&&maze[dx][dy]!=1&&!vis[dx][dy]){                ans[dx][dy].x = tmp.x;                ans[dx][dy].y = tmp.y;                qu.push(node(dx,dy));                vis[dx][dy]=1;            }        }    }}int main(){    for(int i=0; i<5; i++)        for(int j=0; j<5; j++)            scanf("%d",&maze[i][j]);    memset(vis,0,sizeof(vis));    memset(ans,0,sizeof(ans));    bfs();    node tmp=node(4,4);    S.push(tmp);    while(tmp.x||tmp.y){        int x = tmp.x;        int y = tmp.y;        tmp.x = ans[x][y].x;        tmp.y = ans[x][y].y;        S.push(tmp);    }    while(!S.empty()){        tmp = S.top();        S.pop();        printf("(%d, %d)\n",tmp.x,tmp.y);    }    return 0;}


0 0
原创粉丝点击