zoukankan      html  css  js  c++  java
  • HDU1026 Ignatius and the Princess I bfs(需要记录路径)

    一开始用递归显示路径会爆栈,后来用数组road[]保存路径就过了

     1 #include<stdio.h>
     2 #include<queue>
     3 #include<string.h>
     4 using namespace std;
     5 int n,m;
     6 char map[110][110],hp[110][110],flag[110][110];
     7 int road[10010][2];
     8 int dir[4][2]={1,0,-1,0,0,1,0,-1};
     9 struct node
    10 {
    11     int x,y,step;
    12     friend bool operator<(node a,node b)
    13     {
    14         return a.step>b.step;       
    15     }       
    16 }cur,next;
    17 int bfs()
    18 {
    19     priority_queue<node>q;
    20     cur.x=0;
    21     cur.y=0;
    22     cur.step=hp[0][0];
    23     map[0][0]='X';
    24     q.push(cur);
    25     while(!q.empty())
    26     {
    27         cur=q.top();
    28         q.pop();
    29         if(cur.x==n-1&&cur.y==m-1) return 1;
    30         for(int i=0;i<4;i++)
    31         {
    32             next.x=cur.x+dir[i][0];
    33             next.y=cur.y+dir[i][1];
    34             if(next.x<0||next.y<0||next.x>=n||next.y>=m||map[next.x][next.y]=='X') continue;
    35             map[next.x][next.y]='X';
    36             next.step=cur.step+hp[next.x][next.y]+1; 
    37             flag[next.x][next.y]=i;
    38             q.push(next);      
    39         }                     
    40     }  
    41     return 0;  
    42 }
    43 int print()
    44 {
    45     road[cur.step][0]=n-1;
    46     road[cur.step][1]=m-1;
    47     int x,y;
    48     int temp=cur.step;
    49     cur.step-=hp[n-1][m-1];
    50     road[cur.step][0]=n-1;
    51     road[cur.step][1]=m-1;
    52     while(!(cur.x==0&&cur.y==0))
    53     {
    54         x=cur.x-dir[flag[cur.x][cur.y]][0];
    55         y=cur.y-dir[flag[cur.x][cur.y]][1]; 
    56         road[cur.step-1][0]=x;
    57         road[cur.step-1][1]=y;
    58         cur.step-=hp[x][y]+1;
    59         road[cur.step][0]=x;
    60         road[cur.step][1]=y;
    61         cur.x=x;
    62         cur.y=y;  
    63     }
    64     for(int i=0;i<=temp-1;i++)
    65     {
    66         int k=i;
    67         printf("%ds:(%d,%d)->(%d,%d)
    ",i+1,road[i][0],road[i][1],road[i+1][0],road[i+1][1]);            
    68         while(hp[road[k+1][0]][road[k+1][1]]--)  
    69         {
    70             i++;
    71             printf("%ds:FIGHT AT (%d,%d)
    ",i+1,road[k+1][0],road[k+1][1]); 
    72         }
    73     }
    74     return 0;
    75 }
    76 int main()
    77 {
    78     while(scanf("%d%d",&n,&m)!=EOF)
    79     {
    80         memset(map,'X',sizeof(map));
    81         memset(hp,0,sizeof(hp));
    82         memset(flag,0,sizeof(flag));
    83         memset(road,0,sizeof(road));
    84         for(int i=0;i<n;i++)
    85         {
    86             scanf("%s",&map[i]); 
    87             for(int j=0;j<m;j++)
    88                 if(map[i][j]!='X'&&map[i][j]!='.') hp[i][j]=map[i][j]-'0';               
    89         }
    90         if(bfs())
    91         {
    92            printf("It takes %d seconds to reach the target position, let me show you the way.
    ",cur.step); 
    93            print();        
    94         }   
    95         else printf("God please help our poor hero.
    ");
    96         printf("FINISH
    ");                            
    97     }
    98 }
  • 相关阅读:
    streamsets 集成 cratedb 测试
    streamsets k8s 部署试用
    streamsets rest api 转换 graphql
    StreamSets sdc rpc 测试
    StreamSets 相关文章
    StreamSets 多线程 Pipelines
    StreamSets SDC RPC Pipelines说明
    StreamSets 管理 SDC Edge上的pipeline
    StreamSets 部署 Pipelines 到 SDC Edge
    StreamSets 设计Edge pipeline
  • 原文地址:https://www.cnblogs.com/lqquan/p/3688201.html
Copyright © 2011-2022 走看看