• AOJ 6.Hero In Maze


    简单的最短路 BFS DFS都可以实现(BFS应该会更快一点吧)

    其中输入的N、M、T中,N是列,M是行,而不是和大多数题目一样,N是行,M是列

    另外,类中不要乱放常量,类中不要直接为类变量赋初值(不是所有编译器都承认貌似~)

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 #define REP(n) for(int o=0;o<n;o++)
     7 
     8 const int maxn = 25;
     9 const int delta[4] = {0,0,1,-1};
    10 
    11 class LOVE {
    12 private:
    13     int N,M,T;
    14     int x1,y1,x2,y2;
    15     bool visited[maxn][maxn];//是否已访问过该位置
    16     char map[maxn][maxn];//地图
    17     int ans;//结果
    18 
    19 
    20     void dfs(int x,int y,int l) {
    21         if(x < 0 || y < 0 || x >= M || y >= N ||
    22             visited[x][y] == true || map[x][y] == '*')
    23             return;
    24         if(x == x2&&y == y2)
    25             ans = l;
    26 
    27         visited[x][y] = true;
    28 
    29         for(int i = 0;i < 4;i++)
    30             dfs(x + delta[i],y + delta[3 - i],l + 1);
    31 
    32     }
    33 
    34 public:
    35     bool Do() {
    36         scanf("%d%d%d",&N,&M,&T);
    37         //测试数据结束
    38         if(N == 0 && M == 0 && T == 0)
    39             return false;
    40         //输入地图
    41         for(int i = 0;i < M;i++) {
    42             for(int j = 0;j < N;j++) {
    43                 char temp;
    44                 scanf("
    %c
    ",&temp);
    45                 if(temp == 'S') {
    46                     x1 = i;
    47                     y1 = j;
    48                     temp = '.';
    49                 }
    50                 if(temp == 'P') {
    51                     x2 = i;
    52                     y2 = j;
    53                     temp = '.';
    54                 }
    55                 map[i][j] = temp;
    56             }
    57         }
    58 
    59         //输出地图
    60         /*
    61         for(int i = 0;i < M;i++) {
    62             for(int j = 0;j < N;j++)
    63                 printf("%c",map[i][j]);
    64             printf("
    ");
    65         }
    66         printf("
    ");
    67         */
    68 
    69         //初始化
    70         ans = -1;
    71         memset(visited,false,sizeof(visited));
    72         //dfs寻求最短路(用bfs应该会更快点,不过数据小,就不改了)
    73         dfs(x1,y1,0);
    74 
    75         /*
    76         for(int i = 0;i < M;i++) {
    77             for(int j = 0;j < N;j++)
    78                 printf("%d",visited[i][j]);
    79             printf("
    ");
    80         }
    81         printf("
    ");
    82         */
    83 
    84         printf("%s
    ",ans == -1 || ans > T ? "NO" : "YES");
    85 
    86         return true;
    87     }
    88 };
    89 
    90 
    91 
    92 int main() {
    93     LOVE LIVE;
    94     while(LIVE.Do());
    95     return 0;
    96 }
  • 相关阅读:
    Python基础之:数字字符串和列表
    【Flutter 实战】自定义动画-涟漪和雷达扫描
    【Flutter 实战】动画序列、共享动画、路由动画
    kubernetes备份恢复之velero
    Go语言中使用K8s API及一些常用API整理
    Go SDK 操作Docker
    Kubernetes中各组件简介(一)
    HTTPS协议原理解析
    树莓派无屏上手指南
    如何优雅的进行版本回退
  • 原文地址:https://www.cnblogs.com/ohyee/p/5246445.html
Copyright © 2020-2023  润新知