搜索(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)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
随机推荐
- Oracle数据库小知识,改数据库数据
在一张表上面右键-->查询数据,会生成sql语句,表后面带有t,表示模糊查询, 后面跟上for update之后,执行语句-->小锁(编辑数据)就可以修改数据里面的数据了,修改之后--&g ...
- js 验证输入框金额
$("#ipt1").keyup(function () { var reg = $(this).val().match(/\d+\.?\d{0,2}/); var txt = ' ...
- 在线小词典(mysql扩展库操作)
输入英文查询中文 1.建表 create table words( id int primary key auto_increment, enWords varchar(32) not null, c ...
- php设计模式笔记:单例模式
php设计模式笔记:单例模式 意图: 保证一个类仅有一个实例,并且提供一个全局访问点 单例模式有三个特点: 1.一个类只有一个实例2.它必须自行创建这个实例3.必须自行向整个系统提供这个实例 主要实现 ...
- 设置Android程序的默认安装位置
修改 AndroidManifest.xml 文件: <manifest xmlns:android="http://schemas.android.com/apk/res/andro ...
- vi或vim快捷键
1.dG:这是删除光标所在行到最后一行的内容(包括光标所在行的内容) 2.ggVG全选
- 安装 SQL Server 2012 的硬件和软件要求(官方全面)
以下各节列出了安装和运行 SQL Server 2012 的最低硬件和软件要求. 有关 SharePoint 集成模式下 Analysis Services 的要求的详细信息,请参阅硬件和软件要求(S ...
- Django中国|Django中文社区——python、django爱好者交流社区
Django中国致力于成为Python和Django框架等技术的中文开发者学习交流平台. 内容涵盖python教程.python基础.Django教程.python入门.web.py教程.linux教 ...
- linux禁止root用户直接登录sshd并修改默认端口
linux最高权限用户root,默认可以直接登录sshd.为了提高服务器的安全度,需要对它进行禁止,使得攻击者无法通过暴力破解来获取root权限. 1,新建一个用户: #useradd xxx (xx ...
- A simple test
博士生课程报告 视觉信息检索技术 博 士 生:施 智 平 指导老师:史忠植 研究员 中国科学院计算技术研究所 2005年1月 目 ...