zoukankan      html  css  js  c++  java
  • HDU 1242 Rescue

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1242

    可能会有多个朋友去救angel。。当一个朋友已经把守卫打死后,另一个朋友就不受该守卫的影响了


    所有,从A开始,搜索R比较容易实现....bfs


    #include <iostream>
    #include <queue>
    #define MAX_N 205
    #define INF 1000000
    using namespace std;
    
    typedef pair<int ,int > P;
    char maze[MAX_N][MAX_N];
    int d[MAX_N][MAX_N];
    int dx[4]={1,0,-1,0};
    int dy[4]={0,1,0,-1};
    int n,m;
    int gx,gy;          //终点坐标
    queue<P> que;
    
    void init(void)             //初始化
    {
        while(!que.empty())
            que.pop();
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                d[i][j]=INF;
    
    }
    void findg(void)
    {
        for(int i=0; i<n; i++)
            for(int j=0; j<m; j++)
                if(maze[i][j]=='a')
                {
                    gx=i;
                    gy=j;
                    return;
                }
    }
    int bfs(int gx,int gy)          //从终点向起点搜索
    {
        que.push(make_pair(gx,gy));
        d[gx][gy]=0;
    
        while(que.size())
        {
            P p=que.front();
            que.pop();
            if(maze[p.first][p.second]=='r')            //已找到
                return d[p.first][p.second];
            for(int i=0;i<4;i++)
            {
                int nx=p.first+dx[i];
                int ny=p.second+dy[i];
                if(0<=nx&&nx<n&&0<=ny&&ny<m&&maze[nx][ny]!='#'&&d[nx][ny]==INF)
                {
                    que.push(make_pair(nx,ny));
                    d[nx][ny]=d[p.first][p.second]+1;
                    if(maze[nx][ny]=='x')       //如果为守卫,
                        d[nx][ny]+=1;
                }
    
            }
    
        }
        return -1;
    
    }
    
    
    int main()
    {
        int i;
        int ans;
        while(cin>>n>>m)
        {
            init();
            ans=INF;
            for(i=0;i<n;i++)
                cin>>maze[i];
            findg();
            ans=bfs(gx,gy);
    
            if(ans==-1)
                cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;
            else
                cout<<ans<<endl;
    
        }
    
        return 0;
    }
    


  • 相关阅读:
    centOS和windows7双系统下重装windows后恢复centOS引导
    第一天
    Spring初学
    myBatis-一级缓存与二级缓存
    myBatis-类型关联
    myBatis-智能标签
    myBati初学
    myBati初学
    博客系统开发
    Y2分班考试 笔试题总结
  • 原文地址:https://www.cnblogs.com/frankM/p/4399488.html
Copyright © 2011-2022 走看看