POJ:1562 Oil Deposits

经典的DFS。

八连块问题,UVa上做过原题。

注意下有关字符串的输入问题,scanf(“%s”,s)不会读入换行。

 

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int N,M;
char grid[105][105];
bool vis[105][105];
void dfs(int i,int j)
{
    if(vis[i][j]) return;
    if(grid[i][j]!='@') return;
    if(!(1<=i&&i<=N&&1<=j&&j<=M)) return;
    vis[i][j]=true;
    dfs(i-1,j-1);
    dfs(i-1,j);
    dfs(i-1,j+1);
    dfs(i,j-1);
    dfs(i,j+1);
    dfs(i+1,j-1);
    dfs(i+1,j);
    dfs(i+1,j+1);
}
int main()
{

    while(scanf("%d",&N)&&N)
    {
        scanf("%d",&M);
        memset(grid,0,sizeof(grid));
        memset(vis,0,sizeof(vis));
        for(int i=1; i<=N; ++i)
            scanf("%s",grid[i]+1);
        int ans=0;
        for(int i=1; i<=N; ++i)
            for(int j=1; j<=M; ++j)
                if(grid[i][j]=='@'&&!vis[i][j])
                {
                    ans++;
                    dfs(i,j);
                }
        printf("%d\n",ans);
    }
    return 0;
}


 

你可能感兴趣的:(DFS,水)