zoukankan      html  css  js  c++  java
  • 4980

    #include<cstdio>
    #include<queue>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int tu[300][300];
    bool vis[300][300];
    const int nil=(1<<29);
    struct my{
      int x;
      int y;
      int dirt;
       bool operator<(const my &a)const{return dirt>a.dirt;}
    };
    int m,n;
    //@==1
    //#==2
    //x==3
    int dir[5][5]={{0,0},{0,1},{0,-1},{1,0},{-1,0}};
    int sx,sy,ex,ey;
    int ans[300][300];
    priority_queue<my>Q;
    bool bfs(){
        while(!Q.empty()) Q.pop();
         my u;
         u.dirt=0;
         u.x=sx;
         u.y=sy;
         Q.push(u);
         while(!Q.empty()){
            my v=Q.top();
            Q.pop();
            for (int i=1;i<=4;i++){
                u.dirt=v.dirt+1;
                int dx=v.x+dir[i][0];
                int dy=v.y+dir[i][1];
                if((tu[dx][dy]!=3&&dx<=m&&dy<=n&&dx>0&&dy>0)){
                       // printf("%d %d %d ",dx,dy,ans[ey][ex]);
                    u.x=dx;
                    u.y=dy;
                    if(tu[dx][dy]==1) {
                        u.dirt;
                        Q.push(u);
                    }
                    if(tu[dx][dy]==2){
                        ++u.dirt;
                        Q.push(u);
                    }
                    if(dx==ex&&dy==ey) {
                            printf("%d ",u.dirt);
                    return true;
                   }
               tu[dx][dy]=3;
                }
            }
         }
         return false;
    }
    int main(){
        int t;
        char c;
        scanf("%d",&t);
        while(t--){
            memset(vis,0,sizeof(vis));
            scanf("%d%d",&m,&n);
            scanf("%c",&c);
            for (int i=1;i<=m;i++){
                for (int j=1;j<=n;j++){
                    scanf("%c",&c);
                    if(c=='@') tu[i][j]=1;
                    if(c=='x') tu[i][j]=2;
                    if(c=='#') tu[i][j]=3;
                    if(c=='a') {
                            sx=i,sy=j;
                            tu[i][j]=3;
                            }
                    if(c=='r') {
                            ex=i,ey=j;
                            tu[i][j]=1;
                    }
                }
                scanf("%c",&c);
            }
            tu[sx][sy]=3;
            if(!bfs())
             printf("Impossible ");
        }
    return 0;
    }

  • 相关阅读:
    vim的script、function及command
    Vim中如何移动光标
    command模式下命令的匹配及help内容的搜索
    为什么vim编辑模式下ctrl-w可以前向删除单词及按键映射的展开
    gcc如何实现C++中函数auto返回类型推导
    sqlserver 列转行
    【java笔记】可变长参数(...)
    【c#笔记】可变长参数(params)
    【c#笔记】c#与java的差异:接口定义实现
    【java笔记】Calendar类的陷阱
  • 原文地址:https://www.cnblogs.com/lmjer/p/7852971.html
Copyright © 2011-2022 走看看