深度优先搜索之小z的房子与验证码识别
题目:小z的房子
高级语言程序设计实践题目:2.4 小z 的房子
★实验任务
小z 通过自己的努力,终于发家致富。现在小明有一个大小为N*M 的
院子,雨后积起了水。四联通的积水被认为是连接在一起的。请你帮
小z 计算出院子里有多少水洼。1 代表积水,0 代表没有积水。(四
联通指下面图中下对1 的部分)
*
*1*
*
★数据输入
输入数据共两行。
第一行为一个整数N,M(1<=N,M<=100)表示院子的大小。
接下来N 行M 列的矩阵表示院子中积水情况。
★数据输出
输出数据共一行,为水洼个数。
输入示例输出示例
5 5
00001
01101
01001
11101
11001
2
HINT:
可以百度学习下深度优先搜索。
代码:
#include<stdio.h>
#include<stack>
using namespace std;
char a[105][105];
struct pla
{
int x,y;
};
int tran[5][3]={{-1,0},{1,0},{0,-1},{0,1}};
int n,m;
void DFS(int i,int j)
{
pla begin,between;
begin.x=i;
begin.y=j;
stack<pla>s;
s.push(begin);
a[begin.x][begin.y]='0';//turn 0;
while(!s.empty())
{
begin=s.top();
s.pop();
for(i=0;i<4;i++)
{
between.x=begin.x+tran[i][0];
between.y=begin.y+tran[i][1];
if(between.x>0 && between.x<=n && between.y>0 && between.y<=m && a[between.x][between.y]=='1')
{
//printf("1\n");
s.push(between);
a[between.x][between.y]='0';
}
}
}
}
int main()
{
int i,j,k,t=0,sum=0;
scanf("%d%d",&n,&m);
getchar();
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%c",&a[i][j]);
}
getchar();
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(a[i][j]=='1')
{
DFS(i,j);
//printf("%d %d\n",i,j);
sum++;
}
}
}
/*for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
printf("%c",a[i][j]);
printf("\n");
}*/
printf("%d",sum);
return 0;
}
注意:这里的四联通指的是上下左右。
关于深度优先搜索,可以参考我的blog:深度优先搜索初尝试
在理解完深度优先搜索以后相信此题不是什么难事。
练习:
题目:验证码识别(abc.cpp/c/pas)
【题目描述】
很久很久以前,百度贴吧的爆吧军团借助着爆吧机器和大批人手在各个贴吧里面替天行道!后来百度放出了养了很久的超级验证码,爆吧的效率便低了很多,爆吧军团从此一蹶不振。机智的Kiana,最近加入了沉寂很久的爆吧军团风纪社!他决定想要发明一个验证码识别器,重整风纪社的雄姿!
为了简化问题,我们的验证码为“A”,“B”,“C”字母中的一个,被画在一个n*m的矩阵中,0表示白色,1表示黑色(题目保证验证码是黑色的>_<,并且字母和边界不会相连0.0)。。但是由于百度君的丧心病狂,验证码是标准字体被进行了无数次的拉伸,缩放,旋转,压缩,翻转的操作,有可能会变得难以辨认。而作为Oier的你就是要编写一个程序辨认验证码。
【输入格式】
第1行:两个整数n、m,表示矩阵大小为n行m列
第2..n+1行:每行m个整数,0表示此点为白色,1表示此点为黑色。
【输出格式】
输出识别出来的验证码,为“A”,“B”,“C”中的一个。
【样例输入】
7 7
0 0 0 0 0 0 0
0 0 0 1 0 0 0
0 0 1 0 1 0 0
0 0 1 1 1 0 0
0 0 1 0 1 0 0
0 0 1 0 1 0 0
0 0 0 0 0 0 0
【样例输出】
A
【样例解释】
【数据范围】
10%的数据保证1<=n,m<=10且为标准的字体【就像样例一样的好看的字体哟!】
30%的数据保证1<=n,m<=100且字体并不是那么丧心病狂!
100%的数据保证1<=n,m<=1000
深度优先搜索之小z的房子与验证码识别的更多相关文章
- 深度优先搜索 DFS 学习笔记
深度优先搜索 学习笔记 引入 深度优先搜索 DFS 是图论中最基础,最重要的算法之一.DFS 是一种盲目搜寻法,也就是在每个点 \(u\) 上,任选一条边 DFS,直到回溯到 \(u\) 时才选择别的 ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
- 总结A*,Dijkstra,广度优先搜索,深度优先搜索的复杂度比较
广度优先搜索(BFS) 1.将头结点放入队列Q中 2.while Q!=空 u出队 遍历u的邻接表中的每个节点v 将v插入队列中 当使用无向图的邻接表时,复杂度为O(V^2) 当使用有向图的邻接表时, ...
- hihocoder#1054 : 滑动解锁(深度优先搜索)
描述 滑动解锁是智能手机一项常用的功能.你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点.这些划过的点所组成的有向折线,如果与预设的折线在图案.方向上 ...
- bzoj 4031: [HEOI2015]小Z的房间 轮廓线dp
4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 98 Solved: 29[Submit][Status] ...
- POJ 3009 深度优先搜索
问题:打冰球.冰球可以往上下左右4个方向走,只有当冰球撞到墙时才会停下来,而墙会消失.当冰球紧贴墙时,不能将冰球往那个方向打.冰球出界就当输,超过10次还没将冰球打到目标位置也当输.求用最小次数将冰球 ...
- 【11】python 递归,深度优先搜索与广度优先搜索算法模拟实现
一.递归原理小案例分析 (1)# 概述 递归:即一个函数调用了自身,即实现了递归 凡是循环能做到的事,递归一般都能做到! (2)# 写递归的过程 1.写出临界条件 2.找出这一次和上一次关系 3.假设 ...
- 【BZOJ-4031】小z的房间 Matrix-Tree定理 + 高斯消元解行列式
4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 937 Solved: 456[Submit][Statu ...
- 【刷题】BZOJ 4031 [HEOI2015]小Z的房间
Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. ...
随机推荐
- hadoop学习---运行第一个hadoop实例
hadoop环境搭建好后,运行第wordcount示例 1.首先启动hadoop:sbin/start-dfs.sh,sbin/start-yarn.sh(必须能够正常运行) 2.进入到hadoo ...
- EF5.0区别于EF4.0的增删改写法
// 实现对数据库的添加功能,添加实现EF框架的引用 public T AddEntity(T entity) { //EF4.0的写法 添加实体 //db.CreateObjectSet<T& ...
- Summary: Java中函数参数的传递
函数调用参数传递类型(java)的用法介绍. java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清. (一)基本数据类型:传值,方法不会改变实参的值. public class Te ...
- CXF创建webservice客户端和服务端
转 一.CXF的介绍 Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成.C ...
- 134. Gas Station(数学定理依赖题)
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...
- Protobuffer简介c#
一.Protobuffer和json深度对比 JSON相信大家都知道是什么东西,如果不知道,那可就真的OUT了,GOOGLE一下去.这里就不介绍啥的了. Protobuffer大家估计就很少听说了,但 ...
- Java设计模式应用——适配器模式
性能监控系统中,存在告警模块和报表模块,告警结果和报表结果都需要导出. 由于告警开发进度较快,已经实现了excel导出.csv导出.zip导出功能,现在报表需要excel导出.csv导出.pdf导出功 ...
- python选择排序算法总结
选择排序算法: a=[6,5,4,3,2,1] 算法思路: 第一步:在列表的第一个位置存放此队列的最小值 声明一个变量min_index等于列表的第一个坐标值0 从第一个位置0坐标开始,和它后边所有的 ...
- 如何发布Maven依赖到中央仓库
平时我们都是从Maven中央仓库下载依赖,如果我们想发布我们自己写的Maven依赖到中央仓库供别人下载使用应该怎么办?这里以上传自己写的simian-maven-plugin(https://gith ...
- Linux基础命令---gzip
gzip gzip通过Lempel-ziv算法来压缩文件,压缩的时候保留每个文件的所有者.权限.修改时间.对于符号链接,gzip将会忽略它. 如果压缩的文件名对其文件系统来说太长,则gzip将截断它. ...