任务是输入一n*n的黑白图像(1表示黑色,0表示白色),统计其中八连块的个数,如果两个黑格子有公共边或者公共定点,就说明它们属于同一个八连块
图中左上角的一个黑格子是一个八连块,正上方的三个黑格子是一个八连块,左下角那一堆是一个八连块,能理解八连块是一个组合这题就好写了
用DFS做的 其实BFS我感觉会更好点吧,如果用BFS来写就只需要把队列和栈进行一下转换就行了
#include <iostream>
#include <string>
using namespace std ;
const int MAXN = 1000 ;
int matrix[MAXN][MAXN] , vis[MAXN][MAXN] ;
void dfs(int x, int y)
{
if (!matrix[x][y] || vis[x][y])
return ;
vis[x][y] = 1 ;
dfs(x-1,y) ; dfs(x-1,y-1) ; 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()
{
int n ;
memset(matrix,0,sizeof(matrix)) ;
memset(vis,0,sizeof(vis)) ;
cin >> n ;
for (int i = 0 ; i < n ; i++)
{
string word ;
cin >> word ;
for (int j = 0 ; j < n ; ++ j)
{
matrix[i+1][j+1] = word[j]-'0' ;
}
}
int count = 0 ;
for (i = 1 ; i <= n ; ++ i)
{
for (int j = 1 ; j <= n ; ++ j)
{
if (!vis[i][j] && matrix[i][j])
{
count ++ ;
dfs(i,j) ;
}
}
}
cout << count << endl ;
return 0 ;
}