DFS的简单应用(zoj2110,poj1562)
zoj2110
简单的dfs应用,注意have数组的处理
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<list>
#include<deque>
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<cctype>
#include<sstream>
using namespace std;
#define pii pair<int,int>
#define LL long long int
const double eps=1e-;
const int INF=;
const int maxn=+; int n,m,T;
char Map[maxn][maxn];
int si,sj;
int dx[]={,,,-};
int dy[]={,-,,};
int have[maxn][maxn]; bool dfs(int x,int y,int t)
{
int tx,ty;
have[x][y]=;
bool ans=false;
for(int i=;i<;i++)
{
tx=x+dx[i];
ty=y+dy[i];
if(tx>=&&tx<n&&ty>=&&ty<m)
{
if(Map[tx][ty]=='D'&&T==t+)
{
return true;
}
else if(Map[tx][ty]=='.'&&have[tx][ty]==)
{
ans=dfs(tx,ty,t+);
if(ans) return true;
}
}
}
have[x][y]=;
return false;
} int main()
{
//freopen("in1.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(scanf("%d%d%d",&n,&m,&T)==)
{
getchar();
if(n==&&m==&&T==) break;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
scanf("%c",&Map[i][j]);
have[i][j]=;
if(Map[i][j]=='S')
{
si=i;sj=j;//note the starting point
}
}
getchar();
}
/*for(int i=0;i<n;i++)
{
puts(Map[i]);
}*/
//printf("%d %d\n",si,sj);
if(dfs(si,sj,))
{
puts("YES");
}
else puts("NO");
}
//fclose(stdin);
//fclose(stdout);
return ;
}
zoj2110
poj1562
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<list>
#include<deque>
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<cctype>
#include<sstream>
using namespace std;
#define pii pair<int,int>
#define LL long long int
const double eps=1e-;
const int INF=;
const int maxn=+; char Map[maxn][maxn];
int n,m,ans;
int used[maxn][maxn];
int dx[]={,,,-,-,-,,};
int dy[]={,-,,,,-,,-}; void dfs(int x,int y)
{
used[x][y]=;
//cout<<x<<' '<<y<<endl;
int tx,ty;
for(int i=;i<;i++)
{
tx=x+dx[i];
ty=y+dy[i];
if(tx>=&&ty>=&&tx<n&&ty<m)
{
if(Map[tx][ty]=='@'&&used[tx][ty]==)
{
dfs(tx,ty);
}
}
}
return;
} int main()
{
//freopen("in1.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(scanf("%d%d",&n,&m)==)
{
//getchar();
if(n==&&m==) break;
ans=;
memset(used,,sizeof(used)); for(int i=;i<n;i++)
{
scanf("%s",Map[i]);
}
/*for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<Map[i][j];
}
puts("");
}*/
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(Map[i][j]=='@'&&used[i][j]==)
{
ans++;
dfs(i,j);
}
}
}
printf("%d\n",ans);
}
//fclose(stdin);
//fclose(stdout);
return ;
}
poj1562
DFS的简单应用(zoj2110,poj1562)的更多相关文章
- J - Assign the task - hdu 3974(DFS建树+简单线段树)
题意:给一些节点简单额对应关系,可以组成一个树,如果树的某一个节点更新那么他的所有子节点都要更新,中间,会有一些查询 分析:题意倒也不难理解,但是但是不知道怎么建树...于是自能百度,看了kuangb ...
- 简单搜索dfs, 简单的修剪搜索
选择最合适的语言做一个项目是非常重要的.但,熟练的掌握自己的武器,这也是非常重要的. ========================================================= ...
- POJ 2023 Choose Your Own Adventure(树形,dfs,简单题)
题意: 输入一个整数n,表示有n组测试数据, 每组第一行输入一个整数x表示该组测试一共有x页,接下来输入x行,每行表示一页, 每页或者以C开头(第一页都是以C开头),或者以E开头,中间用引号括起一段文 ...
- Leetcode题解 - 树、DFS部分简单题目代码+思路(700、671、653、965、547、473、46)
700. 二叉搜索树中的搜索 - 树 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 思路: 二 ...
- Leetcode题解 - DFS部分简单题目代码+思路(113、114、116、117、1020、494、576、688)
这次接触到记忆化DFS,不过还需要多加练习 113. 路径总和 II - (根到叶子结点相关信息记录) """ 思路: 本题 = 根到叶子结点的路径记录 + 根到叶子结点 ...
- Leetcode题目104.二叉树的最大深度(DFS+BFS简单)
题目描述: 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null, ...
- (DFS)hdoj1198-Farm Irrigation
题目链接 DFS的简单应用,比较繁琐的是处理输入的英文字母.用并查集也可以做(可是笔者现在还没有掌握并查集,之前只用过一次,以后学会回来补上) #include<cstdio> #incl ...
- 搜索(DFS)
不知道为什么~除了我室友其他的同学都觉得DFS很简单~且比BFS容易得多........我真心不觉得啊T T~我真心觉得BFS比DFS简单得多................= = 为了把DFS完全搞 ...
- 图的两种遍历:DFS&BFS
DFS和BFS在图中的应用: 图连通性判定:路径的存在性:图中是否存在环:求图的最小生成树:求图的关键路径:求图的拓扑排序. DFS:简单的说,先一直往深处走,直到不能再深了,再从另一条路开始往深处走 ...
随机推荐
- JSP开发中的基础语法
JSP 语法 JSP开发中的基础语法. 脚本程序 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. 脚本程序的语法格式: <% 代码片段 %> 或者 ...
- 嵌入式开发之字符叠加---gb2313 国标码,utf8 国际码,unicode 无码
(1)国标码简介 (2)编码转换 (3)时间获取 (4)显示切换 最近做了个字符叠加,包括时间叠加,字符中文叠加,位置移动,等功能开启.因为一般的字符叠加的点阵式16位,然后填充着16位的编码是gb2 ...
- 25线程基础-CLR
由CLR via C#(第三版) ,摘抄记录... 1.线程是CPU的虚拟化,windows为每个进程提供专用线程(CPU)2.线程开销:内存和时间. 线程内核对象—OS为系统中创建的每个线程都分配并 ...
- 9.接口BeanPostProcessor
package org.springframework.beans.factory.config; import org.springframework.beans.BeansException; p ...
- 1.设计模式-------Iterator
本文主要是参考<图解设计模式>写的读书笔记: 开发中我用到遍历集合时候,无非我常用的就是简单的for循环,foreach,iterator 这三种方式进行遍历! 当然这三种的效率: 学习I ...
- 通过Safari获取iOS设备的UUID,远程发送更是便捷
1.获取UUID (1)在Safari上输入:http://fir.im/udid (2)点击安装描述文件,然后就可以获取到UUID了 2.fir.im提供一个非常好用的内侧平台 详情使用见:http ...
- height为auto, 滚动条出现时, 使页面不跳动
<style> html { margin-left: calc(100vw - 100%); } </style> ;
- jqweui tabbar使用示例
<!DOCTYPE html> <html class="pixel-ratio-1"> <head> <meta http-equiv= ...
- sublime 添加 注释插件 Docblockr
https://github.com/spadgos/sublime-jsdocs Package Control Open Package Control: Preferences -> Pa ...
- 关于Unicode转为str的方法
unicode_a=u'\u810f\u4e71' str_a=unicode_a.encode('unicode-escape').decode('string_escape')