• HDU 1242——Rescue(优先队列)


    题意:

    一个天使a被关在迷宫里,她的很多小伙伴r打算去救她。求小伙伴就到她须要的最小时间。在迷宫里有守卫。打败守卫须要一个单位时间。假设碰到守卫必须要杀死他

    思路:

    天使仅仅有一个,她的小伙伴有非常多,所以能够让天使找她的小伙伴,一旦找到小伙伴就renturn。时间小的优先级高。优先队列搞定


    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #define fx(i,xi,n) for(int i=xi;i<n;++i)
    #define ms(s,i) memset(s,i,sizeof (s))
    
    using namespace std;
    int dir[4][2]={0,1,0,-1,1,0,-1,0},vis[210][210],flag,ans,n,m;
    char map[210][210];
    bool check(int x,int y){if(x>=0&&x<n&&y>=0&&y<m&&!vis[x][y]&&map[x][y]!='#')return true;return false;}
    struct pp{int x,y,s;friend bool operator<(const pp a,const pp b){return a.s>b.s;}};
    void bfs(int x,int y)
    {
        priority_queue<pp> q;
        pp a,b;
        a.x=x;a.y=y;a.s=0;ms(vis,0);vis[x][y]=1;
        q.push(a);
        while(!q.empty()){
            a=q.top();q.pop();
    //        cout<<a.x<<" "<<a.y<<map[a.x][a.y]<<endl;
            fx(i,0,4){
                b.x=a.x+dir[i][0];b.y=a.y+dir[i][1];
                if(check(b.x,b.y)){
                    vis[b.x][b.y]=1;b.s=a.s+1;
                    if(map[b.x][b.y]=='r'){flag=1;ans=b.s;return ;}
                    if(map[b.x][b.y]=='x') {b.s++;}
                    q.push(b);
                }
            }
        }
    }
    int main()
    {
        while(scanf("%d%d",&n,&m)!=EOF){
        ms(map,'#');
        fx(i,0,n) scanf("%s",map[i]);
        int sx,sy;
        fx(i,0,n)fx(j,0,m){if(map[i][j]=='a'){sx=i;sy=j;}}
        flag=ans=0;
        bfs(sx,sy);
        if(flag) cout<<ans<<endl;
        else cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;
        }
        return 0;
    }




  • 相关阅读:
    Mybatis-plugin插件的使用
    SpringBoot整合mybatis-pagehelper实现分页
    springboot打war包
    keepalived1.4.0安装启动卸载
    六、nginx 搭建高可用集群
    五、nginx的动静分离
    四、nginx的负载均衡
    linux中mysql忘记root密码如何登陆
    十分钟到你了解OpenStack--nova组件
    docker 中 add 和 copy 的区别
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5119024.html
Copyright © 2020-2023  润新知