zoukankan      html  css  js  c++  java
  • (BFS)hdoj1242-Rescue

    题目地址

    初学BFS,第一次用BFS做题。题目就是一个基本的BFS模型,需要稍加注意的是遇到警卫时间要+1,以及最后比的是最短的时间而不是步数。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<queue>
     4 #define s 205
     5 #define INF 100000
     6 using namespace std;
     7 struct lo//建立结构体,存储点坐标和某种方法走到这里话费的步数和时间
     8 {
     9     int x,y,step,time;
    10 };
    11 queue<lo> q;//建立队列,存放结点
    12 int mintime[s][s],dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}},m,n,si,sj,ei,ej;//si、sj存储起点,mintime存储到某点最短时间,初始化为INF
    13 char tem[s][s];//存储地图
    14 int BFS(lo x)
    15 {
    16     int i;
    17     q.push(x);
    18     lo hd;
    19     while(!q.empty())//为找到最优解,需要等到队列为空才能停止
    20     {
    21         hd=q.front();//拿出队列头,从队列头的结点开始继续走。
    22         q.pop();
    23         for(i=0;i<4;i++)
    24         {
    25             int x=hd.x+dir[i][0],y=hd.y+dir[i][1];
    26             if(x>=0&&x<m&&y>=0&&y<n&&tem[x][y]!='#')//如果朝某个方向走一步可行,那么就判断这样是否是最短。若是,则压入
    27             {
    28                 lo t;
    29                 t.x=x;t.y=y;t.time=hd.time+1;t.step=hd.step+1;
    30                 if(tem[x][y]=='x')  t.time++;//如果是警卫,时间要+1
    31                 if(t.time<mintime[x][y])//或许有走到这里时间更短的方法,但既然每种都放入了队列,后来都会从这里继续走
    32                 {mintime[x][y]=t.time;
    33                 q.push(t);
    34                 }
    35             }
    36         }
    37     }
    38     return mintime[ei][ej];//返回答案
    39 }
    40 int main()
    41 {
    42     while(~scanf("%d%d",&m,&n))
    43     {
    44         memset(tem,0,sizeof(tem));
    45         int i,j,an;
    46         for(i=0;i<m;i++)
    47         {
    48             scanf("%s",tem[i]);
    49         }
    50         for(i=0;i<m;i++)
    51         {
    52             for(j=0;j<n;j++)
    53             {
    54                 mintime[i][j]=INF;//初始化时间都为INF
    55                 if(tem[i][j]=='a')
    56                 {
    57                     ei=i;ej=j;
    58                 }
    59                 else if(tem[i][j]=='r')
    60                 {
    61                     si=i;sj=j;
    62                 }
    63             }
    64         }
    65         lo t;
    66         t.x=si;t.y=sj;t.step=0;t.time=0;mintime[si][sj]=0;
    67         an=BFS(t);
    68         if(an<INF)
    69             printf("%d
    ",an);
    70         else
    71             printf("Poor ANGEL has to stay in the prison all his life.
    ");
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    SAP OPEN UI5 Step 8: Translatable Texts
    SAP OPEN UI5 Step7 JSON Model
    SAP OPEN UI5 Step6 Modules
    SAP OPEN UI5 Step5 Controllers
    SAP OPEN UI5 Step4 Xml View
    SAP OPEN UI5 Step3 Controls
    SAP OPEN UI5 Step2 Bootstrap
    SAP OPEN UI5 Step1 环境安装和hello world
    2021php最新composer的使用攻略
    Php使用gzdeflate和ZLIB_ENCODING_DEFLATE结果gzinflate报data error
  • 原文地址:https://www.cnblogs.com/quintessence/p/6032595.html
Copyright © 2011-2022 走看看