//----------------------------------------------图
6.4.1 黑白图像:求八连块
问题描述:
寻找一个n*n的图像中,八连块的个数。(最大相邻黑格的个数)
代码:
/* 图的dfs,深度优先遍历,寻找最大的八连块; (此处定义不同,只要两个黑格子有公共边或者公共顶点即确定为它们相连;) */ #include <stdio.h> #include <string.h> #define N 100 int mat[N][N],visit[N][N]; int max=0,count; void dfs(int x,int y) { if(mat[x][y] && visit[x][y]==0) {count++,visit[x][y]=1;} else return ; //遍历其周围所有点; 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() { int i,j,n; printf("请输入一个整数n:代表整个图像的边长。\n"); while(scanf("%d",&n)!=EOF) { memset(mat,0,sizeof(mat)); memset(visit,0,sizeof(visit));//初始化为0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&mat[i][j]);//输入0或者1 代表是否可通;1代表可通;(周围一圈0代表亦不可通;) max=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(!visit[i][j] && mat[i][j]) {count=0;dfs(i,j);if(count>max) max=count;} printf("%d\n",max); } return 0; }
6.4.2 走迷宫:
图的BFS,后续补充;