dfs入门-cogs1640[黑白图像]
题目链接:http://cogs.pro:8081/cogs/problem/problem.php?pid=vxSmxkeqa
【题目描述】
输入一个n×n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数。如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块。如下图所示的图形有3个八连块。

【输入格式】
第1行输入一个正整数n(n≤700),此后输入n行,每行是由n个0或1组成的字符串。
【输出格式】
在此键入。
【样例输入】
6
100100
001010
000000
110000
111000
010100
【样例输出】
3
思路:以二维int数组存入整张图,设置vis数组表示当前位置是否访问过,读入时一定要以%1d读入,
因为一次只读一个,算法开始时将数组初始化为0,之后二层for循环遍历每个位置,如果vis为0且数据为1,
则进入dfs函数,每次访问将vis[i][j]赋值为1,搜索完ans++,最后结束循环。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std; int N;
int ans = ;
int c[][] = { };
int vis[][] = { };
int X[] = { , , -, , , -, , -};
int Y[] = { , , , -, -, , , -}; void dfs(int x, int y)
{
if (!c[x][y] || vis[x][y])
return;
vis[x][y] = ;
for (int i = ; i < ; i++)
{
int dx = x + X[i], dy = y + Y[i];
dfs(dx, dy);
}
} int main()
{
freopen("common.in", "r", stdin);
freopen("common.out", "w", stdout);
memset(c, , sizeof(c));
memset(vis, , sizeof(vis));
scanf("%d", &N);
getchar();
for (int i = ; i <= N; i++)
{
for (int j = ; j <= N; j++)
{
scanf("%1d", &c[i][j]);
}
getchar();
} for (int i = ; i <= N; i++)
{
for (int j = ; j <= N; j++)
{
if (!vis[i][j] && c[i][j])
{
ans++;
dfs(i, j);
}
}
}
printf("%d\n", ans);
return ;
}
dfs入门-cogs1640[黑白图像]的更多相关文章
- 黑白图像(DFS)
输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数.如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块.如图6-11所示的图形有3个八连块. 图6-11 拥有3 ...
- 小白书 黑白图像【DFS/Flood Fill】
http://blog.csdn.net/u010470972/article/details/33415617 Description 输入一个n×n的黑白图像(1表示黑色,0表示白色),任务是统计 ...
- [ActionScript 3.0] AS3.0 将图像的Alpha通道转换为黑白图像(分离ARGB方式)
import flash.display.BitmapData; import flash.display.Bitmap; /** * 将图像的Alpha通道转换为黑白图像(分离ARGB方式) */ ...
- [ActionScript 3.0] AS3.0将图像的Alpha通道转换为黑白图像(复制通道方式)
import flash.display.BitmapData; /** * 将图像的Alpha通道转换为黑白图像 */ var p:Point = new Point(0,0); var bmpd: ...
- 算法学习之BFS、DFS入门
算法学习之BFS.DFS入门 0x1 问题描述 迷宫的最短路径 给定一个大小为N*M的迷宫.迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动.请求出从起点到终点所需的最小步数.如果不能到 ...
- TZOJ 3533 黑白图像(广搜)
描述 输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数.如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块.如图所示的图形有3个八连块. 输入 第1行输入一个正 ...
- MATLAB读取黑白图像显示却是黑色,24位深转8位深黑白图像解决方法
1.24位深转8位深: ps将24位深原图.png保存为GIF图256即为8位,再将8位gif图转为需要的.png,即转为8位深png图. 2.MATLAB读取黑白图像显示几乎全为黑色: 这是最近处理 ...
- Leetcode之深度优先搜索(DFS)专题-733. 图像渲染(Flood Fill)
Leetcode之深度优先搜索(DFS)专题-733. 图像渲染(Flood Fill) 深度优先搜索的解题详细介绍,点击 有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 ...
- Oil Deposits(poj 1526 DFS入门题)
http://poj.org/problem?id=1562 ...
随机推荐
- 关于datagridview控件如何动态改变行数问题
首先要把单元格转换成txt文本框然后根据TextChanged事件来进行修改就可以实现 private void Return_DGV_EditingControlShowing(object sen ...
- MySql链接url参数的设置
mysql JDBC URL格式如下: jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值 ...
- 1、docker简介:课程定位、是什么、能干什么、下载
1.前提知识和定位 2.是什么 1.为什么会有docker出现 环境配置如此麻烦,换一台机器,就要重来一次,费力费时.很多人想到,能不能从根本上解决问题,软件可以带环境安装? 也就是说,安装的时候,把 ...
- map(callback)将一组元素转换成其他数组(不论是否是元素数组)
map(callback) 概述 将一组元素转换成其他数组(不论是否是元素数组) 你可以用这个函数来建立一个列表,不论是值.属性还是CSS样式,或者其他特别形式.这都可以用'$.map()'来方便的建 ...
- Ubuntu16.04下安装多版本cuda和cudnn
Ubuntu16.04下安装多版本cuda和cudnn 原文 https://blog.csdn.net/tunhuzhuang1836/article/details/79545625 前言 因为之 ...
- 用HQL自己写了个update!!!
原来代码: public void updateSj(String jsly, Integer zu,String sj) { if (!StringUtils.isBlank(jsly)&& ...
- golang的写文件测试
package main import ( "os" "strings" "time" "fmt" "strc ...
- 【软件工程】Beta冲刺(4/5)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 新增数据分析展示等功能API 服务器后端部署,API接口的beta版实现 展示 ...
- shell远程操作另外一台机器上数据
shell远程操作另外一台机器上的数据,有两种方式: 1 .配置免密登陆,2.使用sshpass 当前存在两台虚拟机,ip地址分别为:192.168.3.32 192.168.3.33 一.免密登陆操 ...
- CI框架对HTML输入的处理/CI框架引用ueditor时对提交内容的默认处理
项目里近期用到了富文本编辑器,可是写入数据的时候总是写入, <p xss="removed">内容</p> 所有的样式都会被改写成这样,xss=" ...