zoukankan      html  css  js  c++  java
  • POJ 1979 深度优先搜索

    题意:有红色和黑色的格子,只能走黑色的,问从起始位置出发,最多能走到达多少块黑色格子。

    分析:相当于走迷宫,黑色格子是路,红色格子是墙,每次到达一个未到达过的格子时计数,原点也算是一个。每次可以走上下左右四个方向,用深度优先遍历从原点起始,一直到遍历所有能到达的格子。需要注意的是,不要重复走同一个格子,可以采取数组标记已走过的格子,但这里只需简单将已走过的格子标记为红色就可以达到目的,因为红色的格子也不可走。

    C++代码:

     1 #include <cstdio>
     2 
     3 const int MAX_W = 20;
     4 const int MAX_H = 20;
     5 
     6 //输入
     7 int W;
     8 int H;
     9 char maze[MAX_H][MAX_W + 1];
    10 
    11 //4个方向
    12 const int d[4][2] = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
    13 
    14 int dfs(int x, int y){
    15     int ans = 0;
    16     for(int i = 0; i < 4; i ++){
    17         int nx = x + d[i][0], ny = y + d[i][1];
    18         if(0 <= nx && nx < H && 0 <= ny && ny < W && maze[nx][ny] == '.'){
    19             ans ++;
    20             maze[nx][ny] = '#';
    21             ans += dfs(nx, ny);
    22         }
    23     }
    24     return ans;
    25 }
    26 
    27 void solve(){
    28     //找出起始位置
    29     int sx, sy;
    30     for(int i = 0; i < H; i ++){
    31         for(int j = 0; j < W; j ++){
    32             if(maze[i][j] == '@'){
    33                 sx = i;
    34                 sy = j;
    35                 break;
    36             }
    37         }
    38     }
    39     //深度优先遍历,每到一个新位置就计数
    40     int ans = 1 + dfs(sx, sy);
    41     printf("%d
    ", ans);
    42 }
    43 
    44 int main(int argc, char const *argv[]){
    45 
    46     while(scanf("%d %d", &W, &H)){
    47         if(W == 0 && H == 0) break;
    48         for(int i = 0; i < H; i ++)
    49             scanf("%s", maze[i]);
    50         solve();
    51     }
    52 
    53     return 0;
    54 }
  • 相关阅读:
    Oracle DataGuard搭建(二)
    Oracle DataGuard搭建(一)
    Linux 安装oracle10g 配置dataguard 介绍和步骤
    Oracle DataGuard数据备份方案详解
    汽车行业的DMS系统 IT不变应万变
    汽车行业DMS系统介绍
    详解UML中的聚合,关联,泛化等关系
    ASP.NET将Session保存到数据库中
    C#快捷键
    Asp.net中使用资源文件实现网站多语言
  • 原文地址:https://www.cnblogs.com/7hat/p/3583759.html
Copyright © 2011-2022 走看看