搜索(DFS)
不知道为什么~除了我室友其他的同学都觉得DFS很简单~且比BFS容易得多........我真心不觉得啊T T~我真心觉得BFS比DFS简单得多................= =
为了把DFS完全搞懂,决定做一些DFS的题目.......
HDU 2181 哈密顿绕行世界问题
题意:
给出每个城市与之相连的三个城市的编号,求出给定城市环游所有城市,并回到给定城市的所有路线~按字典序输出~
是一道简单的DFS题目~只要注意输出的第一个和最后一个都是给定城市,以及哈密顿所走城市数即可~
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; int a[][],b[],c[],n,cas; void DFS(int x,int step)
{
int i,j,t;
for(i=;i<;i++)
{
t=a[x][i];
if(t==n && step==)
{
printf("%d: ",++cas);
for(j=;j<=;j++)
printf(" %d",c[j]);
printf("\n");
}
else
if(b[t]==)
{
b[t]=;
c[step+]=t;
DFS(t,step+);
b[t]=;
}
}
return;
} int main()
{
int i;
for(i=;i<=;i++)
scanf("%d%d%d",&a[i][],&a[i][],&a[i][]);
while(scanf("%d",&n),n)
{
cas=;
memset(b,,sizeof(b));
b[n]=;
c[]=c[]=n;
DFS(n,);
}
return ;
}
//memory:228KB time:0ms
HDU 1312 Red and Black
题意:找出与'@'相连的'.'的个数('@'也算在内~)
也可以用BFS做,不过是在练DFS嘛~就只写了DFS的代码~
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std; int m,n,number,add[][]={{,},{,-},{,},{-,}};
char a[][]; void DFS(int x,int y,int step)
{
int i,hx,hy;
for(i=;i<;i++)
{
hx=x+add[i][];
hy=y+add[i][];
if(a[hx][hy]=='.')
{
a[hx][hy]='#';
number++;
DFS(hx,hy,step+);
}
}
} int main()
{
int i,j;
while(scanf("%d%d",&m,&n),m,n)
{
memset(a,,sizeof(a));
for(i=;i<n;i++)
scanf("%s",a[i]);
for(i=;i<n;i++)
for(j=;j<m;j++)
if(a[i][j]=='@')
{
number=;
DFS(i,j,);
break;
}
printf("%d\n",number);
}
return ;
}
//memory:232KB time:15ms
WA一次是地图开小了一点~~~
HDU 1010 Tempter of the Bone
题意:给出出发点'S'、结束点'D'以及时间Time,看是否能恰好在Time时间上由'D'到达'S'上。其中'X'是不能走的~
在此题上要注意剪枝~我由于没有剪枝,结果TLE了......T T
看了网上的结题报告,发现要用到”奇偶剪枝“~~~
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; char a[][];
int m,n,time,temp,x1,x2,y1,y2,minn,add[][]={{,},{-,},{,},{,-}};
bool ID; void DFS(int x,int y,int step)
{
int i,hx,hy;
if(x<= || y<= || x>m || y>n || step>time)
return;
if(x==x2 && y==y2 && step==time)
{
ID=true;
return;
}
if(ID) return;
temp=time-step-abs(x-x2)-abs(y-y2);
if(temp< || temp&) return;
for(i=;i<;i++)
{
hx=x+add[i][];
hy=y+add[i][];
if(a[hx][hy]!='X')
{
a[hx][hy]='X';
DFS(hx,hy,step+);
a[hx][hy]='.';
}
}
return;
} int main()
{
int i,j,k;
while(scanf("%d%d%d",&m,&n,&time),m,n,time)
{
// memset(a,0,sizeof(a));
ID=false;
k=;
for(i=;i<=m;i++)
for(j=;j<=n;j++)
{
cin>>a[i][j];
if(a[i][j]=='S')
{
x1=i;
y1=j;
}
if(a[i][j]=='D')
{
x2=i;
y2=j;
}
if(a[i][j]=='X')
++k;
}
if(m*n-k<=time)
{
printf("NO\n");
continue;
}
a[x1][y1]='X';
DFS(x1,y1,);
if(ID) printf("YES\n");
else printf("NO\n");
}
return ;
}
搜索(DFS)的更多相关文章
- 简单搜索dfs, 简单的修剪搜索
选择最合适的语言做一个项目是非常重要的.但,熟练的掌握自己的武器,这也是非常重要的. ========================================================= ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)
需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...
- POJ 2243 简单搜索 (DFS BFS A*)
题目大意:国际象棋给你一个起点和一个终点,按骑士的走法,从起点到终点的最少移动多少次. 求最少明显用bfs,下面给出三种搜索算法程序: // BFS #include<cstdio> #i ...
- 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof
题目传送门 /* 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + ...
- 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
题目传送门 /* 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操 ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析
转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...
- 【算法入门】深度优先搜索(DFS)
深度优先搜索(DFS) [算法入门] 1.前言深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解 ...
- 深度优先搜索 DFS 学习笔记
深度优先搜索 学习笔记 引入 深度优先搜索 DFS 是图论中最基础,最重要的算法之一.DFS 是一种盲目搜寻法,也就是在每个点 \(u\) 上,任选一条边 DFS,直到回溯到 \(u\) 时才选择别的 ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
随机推荐
- Windows7 下安装 CentOS6.5
内容来自:http://blog.163.com/for_log/blog/static/2162830282013031031278/第一部分:安装前准备1. 准备两个fat32格式的分区,一个用于 ...
- Cocos2d-x课程大纲/学习路线
Cocos2d-x课程大纲/学习路线 这是什么? 这个一个Cocos2d-x技术路线的课程大纲/学习大纲. 你能用它做什么? 如果你是找工作的人, 利用本大纲, 你可以学习Cocos2d-x, 做一个 ...
- 【 java版坦克大战--事件处理】 让坦克动起来--事件处理的准备
要能够控制坦克运动,必须用到事件处理的知识. 事件处理的一个demo. /** * 事件处理机制:委派事件模型.指当事件发生的时候,产生事件的对象(事件源),会把此 * "消息"传 ...
- 2016031601 - 刻录ubuntu的U盘启动盘
使用UltraISO来刻录ubuntu15.1的系统安装盘. 需要U盘1个,ubuntu15.1系统镜像文件. 具体步骤如下: a.安装UltraISO软件,具体软件安装. b.安装完成后进行系统刻录 ...
- POJ 3273 Monthly Expense 二分枚举
题目:http://poj.org/problem?id=3273 二分枚举,据说是经典题,看了题解才做的,暂时还没有完全理解.. #include <stdio.h> #include ...
- Redis总录
设计 选择合适的数据对象来存储对象:String,List,Hash(Entity角色对象),Set,Zset(需要排序): 选择存储是全局的,还是局部的: 机制 批处理(pipeline) 事务(w ...
- 用 OUTLOOK VBA 生成 自定义文件夹 邮件列表
Option Explicit Sub TestFolder() 'Dim outlookapp, myitem, myfolder 'Dim mailcounts As Integer ' ' 'S ...
- QLGame 2d Engine Android端环境搭建(通过jni读取assets目录的文件)
QLGame 2d Engine win端已经实现了一个动物的动画了,初步的东西已经完成,考虑在Android端也实现这些基本的东西,这样跨平台的引擎也就实现了! 要在Android下编程,首先要实现 ...
- SecureCRT 绝佳配色方案, 保护你的眼睛
http://blog.csdn.net/zklth/article/details/8937905 关键词:SecureCRT配色, SecureCRT设置颜色, Linux终端配色,Linux ...
- 【网络流24题】No. 13 星际转移问题 (网络判定 最大流)
[题意] 由于人类对自然资源的消耗, 人们意识到大约在 2300 年之后, 地球就不能再居住了.于是在月球上建立了新的绿地,以便在需要时移民. 令人意想不到的是, 2177 年冬由于未知的原因, 地球 ...