zoj 1649 BFS

简介: // zoj 1649#include<stdio.h>#include<queue>#include<string.h>using namespace std;#define MAXN 200#define INF 1000000struct point{ int x,y; int step,time;};queue
// zoj 1649
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
#define MAXN 200
#define INF 1000000
struct point
{
    int x,y;
    int step,time;
};
queue<point> Q;
int N,M,ax,ay;
char map[MAXN][MAXN];
int time[MAXN][MAXN];
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int bfs(point s)
{
    int i;
    Q.push(s);
    point jk;
    while(!Q.empty())
    {
        jk=Q.front();
        Q.pop();
        for(i=0; i<4;i++)
        {
            int x=jk.x+dir[i][0];
            int y=jk.y+dir[i][1];
            if(x>=0&&x<=N-1&&y>=0&&y<=M-1&&map[x][y]!='#')
            {
                point t;
                t.x=x;
                t.y=y;
                t.step=jk.step+1;
                t.time=jk.time+1;
                if(map[x][y]=='x')
                    t.time++;
                if(t.time<time[x][y])
                {
                    time[x][y]=t.time;
                    Q.push(t);
                }
            }
        }
    }
    return time[ax][ay];
}
int main()
{
    int i,j;
    //freopen("input.txt","r",stdin);
    while(scanf("%d%d",&N,&M)!=EOF)
    {
        memset(map,0,sizeof(map));
        for(i=0; i<N; i++)
            scanf("%s",map[i]);
        int sx,sy;
        point start;
        for(i=0; i<N; i++)
            for(j=0; j<M; j++)
            {
                time[i][j]=INF;
                if(map[i][j]=='a')
                {
                    ax=i;
                    ay=j;
                }
                else if(map[i][j]=='r')
                {
                    sx=i;
                    sy=j;
                }
            }
        start.x=sx;
        start.y=sy;
        start.step=0;
        start.time=0;
        int min=bfs(start);
        if(min<INF)
            printf("%d\n",min);
        else printf("Poor ANGEL has to stay in the prison all his life.\n");
    }
    return 0;
}

目录
相关文章
|
6天前
Poj 3255(dijkstra求次短路)
Poj 3255(dijkstra求次短路)
20 0
HDU-1874,畅通工程续(Floyd最短路)
HDU-1874,畅通工程续(Floyd最短路)
|
存储 定位技术 C++
【PTA】龙舌兰酒吧 (BFS求双源最短路)
【PTA】龙舌兰酒吧 (BFS求双源最短路)
131 0
【PTA】龙舌兰酒吧 (BFS求双源最短路)
|
人工智能 并行计算 网络架构
|
算法 计算机视觉 存储
【HDU 2586 How far away?】LCA问题 Tarjan算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:给出一棵n个节点的无根树,每条边有各自的权值。给出m个查询,对于每条查询返回节点u到v的最短路径的权值和,按查询顺序输出结果。
1038 0
【HDU 4771 Stealing Harry Potter&#39;s Precious】BFS+状压
2013杭州区域赛现场赛二水。。。 类似“胜利大逃亡”的搜索问题,有若干个宝藏分布在不同位置,问从起点遍历过所有k个宝藏的最短时间。 思路就是,从起点出发,搜索到最近的一个宝藏,然后以这个位置为起点,搜索下一个最近的宝藏,直至找到全部k个宝藏。
1017 0