DFS专攻:HDU 1312与COJ 1061

COJ 1061简单的DFS……
#include<iostream>
#include<cstdio>
int n,m,sum,a[50][50]={0};
char b[50][50];
using namespace std;
void dfs(int i,int j)
{
    sum++;
    a[i][j]=1;
    if(!a[i-1][j]&&i-1>=0&&b[i-1][j]==b[i][j]) dfs(i-1,j);
    if(!a[i][j-1]&&j-1>=0&&b[i][j-1]==b[i][j]) dfs(i,j-1);
    if(!a[i][j+1]&&j+1<m&&b[i][j+1]==b[i][j]) dfs(i,j+1);
    if(!a[i+1][j]&&i+1<n&&b[i+1][j]==b[i][j]) dfs(i+1,j);
}
int main()
{
    int i,j,max=0;
    cin>>n>>m;
    for(i=0;i<n;i++)
            scanf("%s",b[i]);
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
        {
            sum=0;
            if(!a[i][j])
            {
                dfs(i,j);
                if(max<sum) max=sum;
            }
        }
    cout<<max<<endl;
    return 0;
}

HDU 1312

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<vector>
#include<stack>
#include<ctime>
#include<cstdlib>
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
using namespace std;
int n,m,sum;
char a[22][22];
void dfs(int x,int y)
{
    if(x<0||x>=n||y<0||y>=m||a[x][y]=='#') return;
    sum++;
    a[x][y]='#';
    dfs(x,y+1);
    dfs(x,y-1);
    dfs(x+1,y);
    dfs(x-1,y);
}
int main()
{
    while(cin>>m>>n&&(m||n))
    {
        int i,j,x1,y1,flag=1;
        sum=0;
        for(i=0;i<n;i++)
        {
            cin>>a[i];
            if(flag)
            {
                for(j=0;j<m;j++)
                if(a[i][j]=='@')
                {
                    x1=i;
                    y1=j;
                    flag=0;
                }
            }
        }
        dfs(x1,y1);
        cout<<sum<<endl;
    }
    return 0;
}


你可能感兴趣的:(DFS专攻:HDU 1312与COJ 1061)