黑白图像

#include <stdio.h>
#include <string.h>

#define MAX 1000+10

char mat[MAX][MAX], vis[MAX][MAX];

void dfs(int x, int y)         //mat[][]存图像,1代表黑; vis[][]标记是否访问过这个格子
{
    if (!mat[x][y] || vis[x][y])
    {
        return;
    }

    vis[x][y] = 1;             //标记此点访问过
    dfs(x-1, y-1); dfs(x-1, y); dfs(x-1, y+1);   //递归访问周围8个点
    dfs(x, y-1);                dfs(x, y+1);
    dfs(x+1, y-1); dfs(x+1, y); dfs(x+1, y+1);
}

int main(void)
{
    memset(mat, 0, sizeof(mat));
    memset(vis, 0, sizeof(vis));

    int i, j, n, cnt = 0;

    scanf("%d", &n);
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=n; j++)
        {
            scanf("%d", &mat[i][j]);
        }
    }

    for (i=1; i<=n; i++)
    {
        for (j=1; j<=n; j++)
        {
            if (mat[i][j] && !vis[i][j])   //找没访问过的黑格
            {
                cnt++;
                dfs(i, j);
            }
        }
    }

    printf("%d\n", cnt);

    return 0;
}

参考链接:http://www.cnblogs.com/RootJie/archive/2012/02/21/2361327.html

这个是白书上的一个例题,刚刚来开始研究图论。这个地方使用了两个二维数组,一个用来记录图的形状,另外一个用来判断当前点是否是被访问过的。即mat和vis。

输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数。如果两个黑格子有公共边或者有公共顶点,就说它们属于同一个八连块。

如下图所示,八连块的个数为3。

即输入为:

6

1  0  0  1  0  0

0  0  1  0  1  0

0  0  0  0  0  0

1  1  0  0  0  0

1  1  1  0  0  0

0  1  0  1  0  0

输出

3

属于入门级别的dfs

时间: 2024-10-28 20:32:40

黑白图像的相关文章

ACM:图的DFS,黑白图像

题目:输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数.如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块. 输入:第一行输入一个整数n(n<=500),下面输入n行,每行是由n个0或1组成的字符串. 输出:输出有多少个八连块,以及每个块的面积.一个方格的面积为1. 分析:把图片最外层扩展开来,在最外面加一层白色的框框..设置一个数组来存储每个八连块的面积..DFS递归调用每一个黑色的方块..DFS的最后一个参数要设置为传递引用.. #include <

深度搜索应用之黑白图像(非递归)

深度搜索应用之黑白图像(非递归) 前言: 使用深度搜索,有两个方法:递归,栈.本质是栈. 递归有一个缺陷,栈溢出.栈有一个缺陷,程序相对递归更复杂. 练习题: 输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数.如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块.(题意是让求连在一起的块有几个,图见书本)   使用递归求解:点这里 使用栈求解: 1 #include <iostream> 2 #include <memory.h> 3 #inc

MATLAB读取黑白图像显示却是黑色,24位深转8位深黑白图像解决方法

1.24位深转8位深: ps将24位深原图.png保存为GIF图256即为8位,再将8位gif图转为需要的.png,即转为8位深png图. 2.MATLAB读取黑白图像显示几乎全为黑色: 这是最近处理图像库遇见的一个问题,估计是MATLAB的一个bug,用MATLAB暂时没想到解决方法,所以转战有python解决. 问题具体如下: 这是8位深的png图,看上去是黑白色都有,但用MATLAB处理读取后并显示却是:大部分数字为0,边缘部分极少数大于0. 很是诡异有么有,究竟是眼睛欺骗了我们,还是数字

黑白图像问题

1.题目描述:                                                                       黑白图像 Time Limit(Common/Java):1000MS/3000MS          Memory Limit:65536KByteTotal Submit:282            Accepted:82 Description 输入一个n×n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数.如果两个黑

黑白图像—————— 八连块

八连块 [题目]:              输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数.如果两个黑格子有        公共边或者公共顶点,就说它们属于同一个八连块.如下图6-11表示3个八连块. [分析]             通过题目要求,定义8方向数组,运用搜索来确定有几个八连块,搜索查找,     查找过的进行标记,保证不会重复查找到原来的黑格子,另外还要考虑边界问           题,但是下面我的方法就不用考虑边界问题,认真看下面就知道方法了

小白书 黑白图像【DFS/Flood Fill】

http://blog.csdn.net/u010470972/article/details/33415617 Description 输入一个n×n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数.如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块.如下图所示的图形有3个八连块. Input 第1行输入一个正整数n(n≤700),此后输入n行,每行是由n个0或1组成的字符串. Output 在输入黑白图像中,八连块的个数 Sample Input 6 100100 

Visio中如何绘制黑白图像

Camera图像处理原理及实例分析-重要图像概念

Camera图像处理原理及实例分析 作者:刘旭晖  [email protected]  转载请注明出处 BLOG:http://blog.csdn.net/colorant/ 主页:http://rgbbones.googlepages.com/ 做为拍照手机的核心模块之一,camera sensor 效果的调整,涉及到众多的参数,如果对基本的光学原理及 sensor 软/硬件对图像处理的原理能有深入的理解和把握的话,对我们的工作将会起到事半功倍的效果.否则,缺乏了理论的指导,只能是凭感觉和经

C# (GDI+相关) 图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)

原文:C# (GDI+相关) 图像处理(各种旋转.改变大小.柔化.锐化.雾化.底片.浮雕.黑白.滤镜效果) C#图像处理   (各种旋转.改变大小.柔化.锐化.雾化.底片.浮雕.黑白.滤镜效果)     一.各种旋转.改变大小   注意:先要添加画图相关的using引用.   //向右旋转图像90°代码如下: private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) {   Graphics g