• HDU 1026


    #include<iostream>
    #include<string>
    #include<string.h>
    #include<math.h>
    #include<cstdio>
    #include<stack>
    #include<queue>
    #define maxn 101
    using namespace std;
    
    char mapp[maxn][maxn];
    int visited[maxn][maxn],n,m;
    int dir[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
    struct node{
        int x;
        int y;
        int second;
        int x_next;
        int y_next;
        friend bool operator< (node a, node b){return a.second > b.second;}  //按照时间顺序从小到大
    };
    node path[maxn][maxn];
    node en;
    stack<node> S;
    priority_queue <node> pq;
    int bfs(){
        while(!pq.empty()){
            node temp,next;
            temp=pq.top();
            if(temp.x==n-1&&temp.y==m-1){
                en.x=temp.x;
                en.y=temp.y;
                en.x_next=0;
                en.y_next=0;
                return temp.second;
            }
               pq.pop();
            for(int i=0;i<4;i++){
                next.x=temp.x+dir[i][0];
                next.y=temp.y+dir[i][1];
                if(next.x>=0&&next.x<n&&next.y>=0&&next.y<m&&visited[next.x][next.y]==0){
                    if(mapp[next.x][next.y]=='.'){
                        next.second=temp.second+1;
                        visited[next.x][next.y]=1;
    
                          temp.x_next=next.x;
                          temp.y_next=next.y;
                          path[next.x][next.y]=temp;
                          pq.push(next);
                    }else if(mapp[next.x][next.y]>'0'&&mapp[next.x][next.y]<='9'){
                        next.second=temp.second+1+(mapp[next.x][next.y]-'0');
    
                          visited[next.x][next.y]=1;
    
                          temp.x_next=next.x;
                          temp.y_next=next.y;
                           path[next.x][next.y]=temp;
                        //  cout<<temp.x_next<<"  "<<temp.y_next<<endl;
                          pq.push(next);
                    }
    
                }
            }
        }
        return -1;
    }
    
    int main(){
        while(cin>>n>>m){
        memset(visited,0,sizeof(visited));
        memset(mapp,0,sizeof(mapp));
        memset(path,0,sizeof(path));
        while(!pq.empty()) pq.pop();
            for(int i=0;i<n;i++){
                for(int j=0;j<m;j++){
                    cin>>mapp[i][j];
                }
            }
            visited[0][0]=1;
            node t1;
            t1.x=0;t1.y=0;t1.second=0;
            pq.push(t1);
            int t=bfs();
            if(t==-1)
                cout<<"God please help our poor hero."<<endl;
            else{
                cout<<"It takes "<<t<<" seconds to reach the target position, let me show you the way."<<endl;
                S.push(en);
                node temp=path[en.x][en.y];
                while(temp.x||temp.y){
                    S.push(temp);
                   // cout<<temp.x<<" "<<temp.y<<endl;
                    temp = path[temp.x][temp.y];
                }
                S.push(temp);
                 int num = 1;
                while(!S.empty()){
                    temp = S.top();
                    S.pop();
                    if(mapp[temp.x][temp.y] == '.' && !(temp.x_next == 0 && temp.y_next == 0)){
                        printf("%ds:(%d,%d)->(%d,%d)
    ", num ++, temp.x, temp.y, temp.x_next, temp.y_next);
                    }
                    else if(mapp[temp.x][temp.y] >='0' && mapp[temp.x][temp.y] <= '9'){
                        int t = mapp[temp.x][temp.y] - '0';
                        while(t --){
                            printf("%ds:FIGHT AT (%d,%d)
    ", num ++, temp.x, temp.y);
                        }
                        if(!(temp.x_next == 0 && temp.y_next == 0)){
                            printf("%ds:(%d,%d)->(%d,%d)
    ", num ++, temp.x, temp.y, temp.x_next, temp.y_next);
                        }
                    }
                }
            }
            printf("FINISH
    ");
            }
    
    
    
    
       return 0;
    }
  • 相关阅读:
    DWZ集成的xhEditor编辑器浏览本地图片上传的设置
    微服务看门神-Zuul
    OAuth2.0最简向导
    打造个人IP: 开源项目网站构建框架
    提前体验让人"回归Windows怀抱"的Windows Terminal
    ToB蓝海的台阶-PaaS,SaaS技术详解
    再不了解PostgreSQL,你就晚了之PostgreSQL主从流复制部署
    Netty实现高性能IOT服务器(Groza)之精尽代码篇中
    使用keepalived做High Available(HA)
    Nginx 常用配置方式说明
  • 原文地址:https://www.cnblogs.com/wintersong/p/5187296.html
Copyright © 2020-2023  润新知