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;

}

 

 

你可能感兴趣的:(poj)