任务是输入一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 ; }