Description
输入一个n*n(n最大为30)的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数。如果两个黑格子有公共边或者有公共顶点,就说它们属于同一个八连块。
如下图所示,八连块的个数为3。
100100
001010
000000
110000
111000
010100
如下图所示,八连块的个数为3。
100100
001010
000000
110000
111000
010100
Input
第一行输入一个n 表示图的大小
接下来n行 用来表示图的组成
接下来n行 用来表示图的组成
Output
输出八连块的个数
Sample Input
6
100100
001010
000000
110000
111000
010100
100100
001010
000000
110000
111000
010100
Sample Output
3
#include <stdio.h>
#include <string.h>
int acount = 0,n;
int map[100][100];
void dfs(int i, int j);
int dir[8][2] = {{1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1}};
int main()
{
int i = 0, j = 0;
scanf("%d", &n);
memset(map, 0, sizeof(map));
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
scanf("%1d",&map[i][j]);
}
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
if(map[i][j])
{
dfs(i, j);
acount++;
}
printf("%d\n", acount);
return 0;
}
void dfs(int i, int j)
{
int x = 0;
if(!map[i][j])
return;
map[i][j] = 0;
for(x = 0; x < 8; x++)
{
i += dir[x][0];
j += dir[x][1];
dfs(i, j);
i -= dir[x][0];
j -= dir[x][1];
}
}