Hdu 1241 Oil Deposits

简单搜索。DFS求图有几个连通分量。

CODE:

#include <stdio.h>
#include <stdlib.h>
#include < string.h>
#include <math.h>
using  namespace std;

const  int SIZE =  110;
const  int move[ 8][ 2] = {{- 1,- 1}, {- 1, 0}, {- 1, 1}, { 0, 1}, { 0,- 1}, { 1, 1}, { 1, 0}, { 1,- 1}};
char maze[SIZE][SIZE];
int N, M;


int check( int r,  int c)
{
     if(maze[r][c] !=  ' * ' && r >=  0 && c >=  0 && r < N && c < M)
         return  1;
     return  0;
}


void dfs( int r,  int c)
{
    maze[r][c] =  ' * ';
     for( int i =  0; i <  8; i++)
    {
        int rr = r+move[i][ 0];
        int cc = c+move[i][ 1];
        if(check(rr, cc))
       {
            dfs(rr, cc);
       }
    }
}



int main()
{
     int i, j;
     int cnt;
     while(~scanf( " %d%d ", &N, &M), N, M)
    {
        cnt =  0;
        getchar();
         for(i =  0; i < N; i++)    scanf( " %s ", maze[i]);
         for(i =  0; i < N; i++)
        {
             for(j =  0; j < M; j++)
            {
                 if(maze[i][j] ==  ' @ ')
                {
                    dfs(i, j);
                    cnt++;
                }
            }
        }
        printf( " %d\n ", cnt);
    }
     return  0;

} 

你可能感兴趣的:(HDU)