DFS入门之一
深度优先搜索实现较为简单,需要控制两个因素:
1.已经访问过的元素不能再访问,在实际题目中还要加上不能访问的元素(障碍)
2.越界这种情况是不允许的
以杭电的1312 Red and Black 为例, 这是一道典型的DFS题目
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1312
题目大意:'@'代表起始位置, '.' 代表黑点(可以穿越),'#' 代表红点(障碍) 要求统计最多可以覆盖多少个黑点
题目分析:确定起始位置 -> 开始DFS -> 如果不是非法位置,计数一次 -> 递归的搜索四个方向(UP, DOWN, LEFT, RIGHT) ->结束
附上我的代码(仅供参考):
#include <cstdio>
#include <cstring>
const int maxn = + ;
char a[maxn][maxn];
int w, h, idx[maxn][maxn], cnt;
int dfs(int r, int c, int id)
{
if(r < || r >= h || c < || c >= w) return ;
if(idx[r][c] > || a[r][c] == '#') return ;
idx[r][c] = id;
cnt++;
for(int i = -; i <= ; i++)
for(int j = -; j <= ; j++)
if((i == && j != )||(i != && j == )) dfs(r+i, c+j, id);
} int main()
{
int r, c;
while(~scanf("%d%d", &w, &h)){
cnt = ;
if(w == && h == ) break;
for(int i = ; i < h; i++) scanf("%s", a[i]);
memset(idx, , sizeof(idx));
for(int i = ; i < h; i++)
for(int j = ; j < w; j++)
if(a[i][j] == '@'){
r = i;
c = j;
}
dfs(r, c, );
printf("%d\n", cnt);
}
return ;
}
参考一下?
DFS入门之一的更多相关文章
- 算法学习之BFS、DFS入门
算法学习之BFS.DFS入门 0x1 问题描述 迷宫的最短路径 给定一个大小为N*M的迷宫.迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动.请求出从起点到终点所需的最小步数.如果不能到 ...
- Oil Deposits(poj 1526 DFS入门题)
http://poj.org/problem?id=1562 ...
- DFS入门之二---DFS求连通块
用DFS求连通块也是比较典型的问题, 求多维数组连通块的过程也称为--“种子填充”. 我们给每次遍历过的连通块加上编号, 这样就可以避免一个格子访问多次.比较典型的问题是”八连块问题“.即任意两格子所 ...
- poj1562 DFS入门
K - 搜索 Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:10000KB 64bit I ...
- [HDU]1016 DFS入门题
题目的意思就是在1到n的所有序列之间,找出所有相邻的数相加是素数的序列.Ps:题目是环,所以头和尾也要算哦~ 典型的dfs,然后剪枝. 这题目有意思的就是用java跑回在tle的边缘,第一次提交就tl ...
- DFS入门__poj1979
Red and Black Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 26944 Accepted: 14637 D ...
- POJ 3984(DFS入门题 +stack储存路径)
POJ 3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, ...
- HDU 1241 连通块问题(DFS入门题)
Input The input file contains one or more grids. Each grid begins with a line containing m and n, th ...
- POJ 1416 Shredding Company【dfs入门】
题目传送门:http://poj.org/problem?id=1416 Shredding Company Time Limit: 1000MS Memory Limit: 10000K Tot ...
随机推荐
- Errors running builder "Integrated External Tool Builder" on project
Errors during build.Errors running builder "Integrated External Tool Builder" on project p ...
- 在Shell中使用函数文件
需要编写一个较庞大的脚本时,可能会涉及许多函数.变量.这是通常建议将众多的函数.变量放入一个单独的脚本内.这样做的好处很明显,不用担心某个函数.变量是否已经被定义和使用,也不用频繁地定义.清除函数和变 ...
- PCA MATLAB
之前princomp函数还可以正常使用,但是今天突然不能使了!总是显示错误使用 pca输入参数太多. 出错 princomp (line 29) [varargout{1:nargout}]=p ...
- set与hash_set
原文:http://blog.csdn.net/morewindows/article/details/7029587 STL系列之六 set与hash_set set和hash_set是STL中比较 ...
- Golang学习 - fmt 包
------------------------------------------------------------ // Print 将参数列表 a 中的各个参数转换为字符串并写入到标准输出中. ...
- 检测MYSQL不同步发邮件通知的脚本
脚本代码如下:#!/bin/bash ...
- initrd映像文档的作用和制作
1.http://pan.baidu.com/s/1dDrGeKL 2.http://wenku.baidu.com/link?url=qPa_jfkEZCbERnwMYWLwm9EZJ_ebMRJA ...
- 计算运行时间工具timeit
Table of Contents 1. timeit的功能和用法 2. 其它 3. 参考资料 timeit的功能和用法 timeit 模块提供了测试一小段代码运行时间的功能.我前面有一篇文章用它来测 ...
- hadoop2 作业执行过程之yarn调度执行
YARN是hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一管理和调度(目前还不完善,只支持粗粒度的CPU和内存的的调配): 它的基本思想是将Mapreduce的jobtracker ...
- 保持查询语法指示的联接顺序Option(Force order)
Option(Force order) 今天和大家分享一下 SQL中强制执行联接顺序Option(Force Order) 一.SQL本身SQL引擎优化已经做的非常好了,但是也有默认的多表连接引擎效果 ...