DFS专攻:POJ 2386 与HDU 1241相似题目

来源:互联网 发布:农村淘宝网页 编辑:程序博客网 时间:2024/05/06 22:51

POJ 2386:

#include<iostream>#include<cstdio>int n,m;char b[103][103];using namespace std;void dfs(int i,int j){    if(b[i][j]=='.'||i<0||i>=n||j<0||j>=m) return;  //递归不符合的时候直接停止搜索    b[i][j]='.';          //符合的设为‘.’,剩下的再重新递归效率就快了    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(){    int i,j,sum=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++)            if(b[i][j]=='W')            {                sum++;                dfs(i,j);            }    cout<<sum<<endl;    return 0;}

HDU 1241:

#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;char a[102][102];void dfs(int x,int y){    if(x<0||x>=m||y<0||y>=n||a[x][y]=='*') return;    a[x][y]='*';    dfs(x,y+1);    dfs(x,y-1);    dfs(x+1,y);    dfs(x-1,y);    dfs(x+1,y+1);    dfs(x-1,y+1);    dfs(x+1,y-1);    dfs(x-1,y-1);}int main(){    while(cin>>m>>n&&m)    {        int i,j,sum=0;        for(i=0;i<m;i++)            cin>>a[i];        for(i=0;i<m;i++)            for(j=0;j<n;j++)            {                if(a[i][j]=='@')                {                    sum++;                    dfs(i,j);                }            }        cout<<sum<<endl;    }    return 0;}