• HDU 1241 Oil Deposits DFS搜索题


    题目大意:给你一个m*n的矩阵,里面有两种符号,一种是 @ 表示这个位置有油田,另一种是 * 表示这个位置没有油田,现在规定相邻的任意块油田只算一块油田,这里的相邻包括上下左右以及斜的的四个方向相邻的位置。要你求出一共有多少块油田。

    解题报告:用dfs,我的做法是首先在输入的时候将每个有油田的位置标记为1,否则标记为0,然后枚举每一个点,如果这个点有油田,则以这个点为起点,像周围的八个方向搜索,搜到了相邻的点就标记为2,当然这里也可以标记为0,只要是将已经搜过的点标记掉就是了,当dfs退出到main函数的时候,油田数量加一。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<cstdlib>
     7 const int MAX = 100+5;
     8 int m,n,map[MAX][MAX],num;
     9 int dire[8][2] = {{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
    10 void dfs(int x,int y) {
    11     if(map[x][y] == 1) {
    12         map[x][y] = 2;
    13         for(int i = 0;i<8;++i) {
    14             int xx = x + dire[i][0];
    15             int yy = y + dire[i][1];
    16             if(xx<1||xx>m||yy<1||yy>n)
    17             continue;
    18             dfs(xx,yy);
    19         }
    20     }
    21 }
    22             
    23 
    24 int main() {
    25     char c,shu[MAX][MAX];
    26     while(scanf("%d%d",&m,&n),m+n) {
    27         memset(map,0,sizeof(map));
    28         for(int i = 1;i<=m;++i) {
    29             getchar();
    30             for(int j = 1;j<=n;++j) {
    31                 scanf("%c",&c);
    32                 if(c == '@')
    33                 map[i][j] = 1;
    34             }
    35         }
    36         int ans = 0;
    37         for(int i = 1;i<=m;++i)
    38         for(int j = 1;j<=n;++j)
    39         if(map[i][j] == 1) {
    40             dfs(i,j);
    41             ans++;
    42         }
    43         printf("%d
    ",ans);
    44     }
    45     return 0;
    46 }
    47 
    48         
    View Code
  • 相关阅读:
    问题 Duplicate entry '0' for key 'PRIMARY'
    java中转译符用"\"的几种特殊字符
    mysql在查询中常见问题汇总
    linux msql
    shell 简单的比大小脚本
    wordpress的备份与还原
    wordpress的创建
    6、httpd服务的安装、配置
    5、Linux下面桌面的安装
    4、时间同步ntp服务的安装于配置(作为客户端的配置)
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3221576.html
Copyright © 2020-2023  润新知