zoukankan      html  css  js  c++  java
  • zoj 1649 Rescue

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=649

    解题思路:BFS搜索

      1 ///////////////////////////////////////////////////////////////////////////
      2 //problem_id: zoj 1649
      3 //user_id: SCNU20102200088
      4 ///////////////////////////////////////////////////////////////////////////
      5 
      6 #include <algorithm>
      7 #include <iostream>
      8 #include <iterator>
      9 #include <iomanip>
     10 #include <cstring>
     11 #include <cstdlib>
     12 #include <string>
     13 #include <vector>
     14 #include <cstdio>
     15 #include <cctype>
     16 #include <cmath>
     17 #include <queue>
     18 #include <stack>
     19 #include <list>
     20 #include <set>
     21 #include <map>
     22 using namespace std;
     23 
     24 ///////////////////////////////////////////////////////////////////////////
     25 typedef long long LL;
     26 const double PI=acos(-1.0);
     27 
     28 const int x4[]={-1,0,1,0};
     29 const int y4[]={0,1,0,-1};
     30 const int x8[]={-1,-1,0,1,1,1,0,-1};
     31 const int y8[]={0,1,1,1,0,-1,-1,-1};
     32 
     33 typedef int T;
     34 T max(T a,T b){ return a>b? a:b; }
     35 T min(T a,T b){ return a<b? a:b; }
     36 ///////////////////////////////////////////////////////////////////////////
     37 
     38 ///////////////////////////////////////////////////////////////////////////
     39 //Add Code:
     40 const int INF=1000000;
     41 int n,m,Ax,Ay,Min[205][205];
     42 char prison[205][205];
     43 
     44 struct Node{
     45     int x,y,time;
     46 };
     47 
     48 queue<Node> q;
     49 
     50 void BFS(Node s){
     51     q.push(s);
     52     while(!q.empty()){
     53         Node temp=q.front();
     54         q.pop();
     55         for(int i=0;i<4;i++){
     56             int x=temp.x+x4[i],y=temp.y+y4[i];
     57             if(x<1 || x>n || y<1 || y>m || prison[x][y]=='#') continue;
     58             Node res=Node{x,y,temp.time+1};
     59             if(prison[x][y]=='x') res.time++;
     60             if(x==Ax && y==Ay){
     61                 if(res.time<Min[x][y]) Min[x][y]=res.time;
     62             }
     63             else{
     64                 if(res.time<Min[x][y]){
     65                     Min[x][y]=res.time;
     66                     q.push(res);
     67                 }
     68             }
     69         }
     70     }
     71 }
     72 ///////////////////////////////////////////////////////////////////////////
     73 
     74 int main(){
     75     ///////////////////////////////////////////////////////////////////////
     76     //Add code:
     77     while(scanf("%d%d",&n,&m)!=EOF){
     78         int i,j,Rx,Ry;
     79         char c;
     80         scanf("%c",&c);
     81         for(i=1;i<=n;i++){
     82             for(j=1;j<=m;j++){
     83                 scanf("%c",&prison[i][j]);
     84                 Min[i][j]=INF;
     85                 if(prison[i][j]=='a'){
     86                     Ax=i;
     87                     Ay=j;
     88                 }
     89                 else if(prison[i][j]=='r'){
     90                     Rx=i;
     91                     Ry=j;
     92                     Min[i][j]=0;
     93                 }
     94             }
     95             scanf("%c",&c);
     96         }
     97         Node node=Node{Rx,Ry,0};
     98         BFS(node);
     99         if(Min[Ax][Ay]<INF) printf("%d
    ",Min[Ax][Ay]);
    100         else printf("Poor ANGEL has to stay in the prison all his life.
    ");
    101     }
    102     ///////////////////////////////////////////////////////////////////////
    103     return 0;
    104 }
    105 
    106 ///////////////////////////////////////////////////////////////////////////
    107 /*
    108 Testcase:
    109 Input:
    110 7 8
    111 #.#####.
    112 #.a#..r.
    113 #..#x...
    114 ..#..#.#
    115 #...##..
    116 .#......
    117 ........
    118 Output:
    119 13
    120 */
    121 ///////////////////////////////////////////////////////////////////////////
  • 相关阅读:
    03_02_leetcode_24_删除有序数组的重复项
    03_02_leetcode_141_环形链表
    03_02_leetcode_24_两两交换链表中的结点
    Solution -「ZJOI 2014」力
    Solution -「GXOI / GZOI 2019」宝牌一大堆
    Solution -「CSP 2019」Centroid
    Solution -「CSP 2019」Partition
    Note -「Suffix Automaton」SAM
    Solution -「BalticOI 2004」Sequence
    Solution -「BZOJ 3779」重组病毒
  • 原文地址:https://www.cnblogs.com/linqiuwei/p/3270830.html
Copyright © 2011-2022 走看看