第一道懂的深度优先搜索题,找图中八连块的个数
#include <iostream>
#include <cstring>
using namespace std;
#define X 100
int visit[X][X];
int a[X][X];
void dfs(int x,int y) //深度优先搜索
{
if(visit[x][y]||!a[x][y]) //如果是白色或者是遍历过的
return;
visit[x][y] = 1; //遍历过的标记为一
dfs(x-1,y-1); dfs(x-1,y); dfs(x-1,y+1); //递归遍历周围
dfs(x,y-1); dfs(x,y+1);
dfs(x+1,y-1); dfs(x+1,y); dfs(x+1,y+1);
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
int n,i,j;
while(cin>>n)
{
memset(a,0,sizeof(a));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
int count = 0;
memset(visit,0,sizeof(visit)); //扩充边界,使边界涂成白色
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(!visit[i][j]&&a[i][j])
{
count++; //计数
dfs(i,j); //深度优先搜索
}
cout<<count<<endl;
}
return 0;
}