本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!