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:简单的说,先一直往深处走,直到不能再深了,再从另一条路开始往深处走 ...
随机推荐
- (总结)RHEL/CentOS 7.x的几点新改变
一.CentOS的Services使用了systemd来代替sysvinit管理 1.systemd的服务管理程序: systemctl是主要的工具,它融合之前service和chkconfig的功能 ...
- 不使用库函数,编写函数int strcmp(char *source, char *dest) 相等返回0,不等返回-1;
答案:一. int strcmp(char *source, char *dest) { /* assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stder ...
- 牛人blog汇总
1.天一思维: https://blog.csdn.net/tszty1997?t=1
- 电路分析二-------基尔霍夫定律KCL和KVL
1.先了解几个名词 (1)支路----一个二端原件视为一条支路--图中6个二端原件所以有6条支路. (2)结点----两条或以上的支路连接的点. d,e可以看做一个结点. (3).回路----- (4 ...
- POJ 2187 Beauty Contest【旋转卡壳求凸包直径】
链接: http://poj.org/problem?id=2187 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...
- 九度OJ刷题报告
从8月初到现在,已经刷了400道题,越到后面题目越难,但仍会继续努力. 现将自己所AC的代码贴到博客上整理,同时供大家交流参考. 所有代码均为本人独立完成,全部采用C语言进行编写.
- 找出旋转有序数列的中间值python实现
题目给出一个有序数列随机旋转之后的数列,如原有序数列为:[0,1,2,4,5,6,7] ,旋转之后为[4,5,6,7,0,1,2].假定数列中无重复元素,且数列长度为奇数.求出旋转数列的中间值.如数列 ...
- C#DataSet/DataAdapter
DataReader必须持续连接,所以在调用方法SqlDataReader作为返回类型时候,必须在方法外关闭流,很不方便. DataAdapter用于对数据源检索数据并填充到DataSet中的表.Da ...
- Java基础教程:多线程基础(1)——基础操作
Java:多线程基础(1) 实现多线程的两种方式 1.继承Thread类 public class myThread extends Thread { /** * 继承Thread类,重写RUN方法. ...
- ionic添加scss
Setup Sass Automatically 在进行以下操作之前要确保node比较新,以便正确安装node-sass 或 改用cnpm install node-sass安装(淘宝源) $ ion ...