八连块问题

Posted ly_rabbit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八连块问题相关的知识,希望对你有一定的参考价值。

问题描述:共有多少块相邻的空白的区域

注意递归和边界问题的值的设置

 

源代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100 +10
using namespace std;

int mat[MAX][MAX] ,vis[MAX][MAX];

void dfs(int x,int y)
{
    if(!mat[x][y] || vis[x][y])   //1代表空白
        return;
    vis[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);
}
void main()
{
    memset(mat,0,sizeof(mat));
    memset(vis,0,sizeof(mat));
    int n,i,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            scanf("%d",&mat[i+1][j+1]);
    int count=0;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {
            if(mat[i][j] && !vis[i][j])
            {count++;dfs(i,j);}
        }
        printf("%d\n",count);

}

 

以上是关于八连块问题的主要内容,如果未能解决你的问题,请参考以下文章

20612统计八连块

图1(八连块)

八连块问题:统计图中相相连黑色区域的个数

八连块

油田(Oil Deposits)-用DFS求连通块

用DFS求连通块(种子填充)