POJ 1562 Oil Deposits【DFS】&&ZOJ 1709

题目链接:http://poj.org/problem?id=1562

题目大意:就是找有多少个油田,在垂直或者水平或者垂直方向上相邻都算作是属于同一个油田。
解题思路:如果遇到@的话就进行八个方位搜索,然后搜索到@变成*避免重复搜索。

代码如下:

View Code
#include<stdio.h>
#include<string.h>
char map[102][102];
int dir[8][2]={{0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}, {-1, 0}, {-1, 1}};
int m, n;
void dfs(int x, int y)
{
     int i;
     map[x][y]='*';
     for(i=0; i<8; i++)
     {
         int xx=dir[i][0]+x;
         int yy=dir[i][1]+y;
         if(xx>=0&&xx<m&&yy>=0&&yy<n&&map[xx][yy]=='@')
         {
             dfs(xx, yy);
         }
     }
}         
int main()
{
    int i, j;
    while(scanf("%d%d", &m, &n)!=EOF)
    {
        if(m==0&&n==0)  break;
        for(i=0; i<m; i++)
            scanf("%s", map[i]);
        int num=0;
        for(i=0; i<m; i++)
            for(j=0; j<n; j++)
            {
                if(map[i][j]=='@')
                {
                    dfs(i, j);
                    num++;
                }
            }
        printf("%d\n", num);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/Hilda/p/2948600.html