天天看點

UVa-572油田

分析:DFS基礎題,典型題,新手必做之題。

不多做贅述,直接上代碼

代碼如下:

#include <cstdio>

#include <cstring>

using namespace std;

const int maxn=1000;

int m,n,idx[maxn][maxn];

char pic[maxn][maxn];

void dfs(int r,int c,int id)

{

    if (r<0||r>=m||c<0||c>=n) return;

    if (idx[r][c]>0||pic[r][c]!='@') return;

    int dr,dc;

    idx[r][c]=id;

    for (dr=-1;dr<=1;dr++)

    for (dc=-1;dc<=1;dc++)

        if (dc!=0||dr!=0) dfs(r+dr,c+dc,id);

}

int main()

{

    int i,j;

    while (scanf("%d%d",&m,&n)==2&&m&&n)

    {

        int count=0;

        for (i=0;i<m;i++) scanf("%s",pic[i]);

        memset(idx,0,sizeof(idx));

        for (i=0;i<m;i++)

        for (j=0;j<n;j++)

            if (idx[i][j]==0&&pic[i][j]=='@') dfs(i,j,++count);

        printf("%d\n",count);

    }

    return 0;

}