不知道为什么~除了我室友其他的同学都觉得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)的更多相关文章

  1. 简单搜索dfs, 简单的修剪搜索

    选择最合适的语言做一个项目是非常重要的.但,熟练的掌握自己的武器,这也是非常重要的. ========================================================= ...

  2. 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)

    深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...

  3. 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)

    需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...

  4. POJ 2243 简单搜索 (DFS BFS A*)

    题目大意:国际象棋给你一个起点和一个终点,按骑士的走法,从起点到终点的最少移动多少次. 求最少明显用bfs,下面给出三种搜索算法程序: // BFS #include<cstdio> #i ...

  5. 记忆化搜索(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]) + ...

  6. 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty

    题目传送门 /* 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操 ...

  7. 深度优先搜索DFS和广度优先搜索BFS简单解析

    转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...

  8. 【算法入门】深度优先搜索(DFS)

    深度优先搜索(DFS) [算法入门] 1.前言深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解 ...

  9. 深度优先搜索 DFS 学习笔记

    深度优先搜索 学习笔记 引入 深度优先搜索 DFS 是图论中最基础,最重要的算法之一.DFS 是一种盲目搜寻法,也就是在每个点 \(u\) 上,任选一条边 DFS,直到回溯到 \(u\) 时才选择别的 ...

  10. 深度优先搜索(DFS)

    [算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...

随机推荐

  1. CakePHP采用model的save方法更新数据所需查询

    采用model的save方法更新数据所需查询 1. 验证时候要确认是update 或者 create,以便使用对应规则 public $validate = array( 'field_name' = ...

  2. Linux - tar命令过滤某个目录

    tar -zcvf abc.20140325.tar.gz --exclude=./abc/kkk/--exclude=./abc/hhh/ ./abc/ 发现没有过滤成功,后来发现这种方法是不对的( ...

  3. ng表单验证,提交以后才显示错误

    只在提交表单后显示错误信息 有时候不想在用户正在输入的时候显示错误信息. 当前错误信息会在用户输入表单时立即显示. 由于Angular很棒的数据绑定特性,这是可以发生的. 因为所有的事务都可以在一瞬间 ...

  4. sql server 表空间

    在SqlServer2005中,建表时是默认把所有的表都保存在PRIMARY默认表空间中的.当数据库中表很多,并且数据量很大时,会导致数据库性能严重下降,有必要将一些大的表放到不同的表空间中去.主要的 ...

  5. 监听iOS检测屏幕旋转状态,不需开启屏幕旋转-b

    -(void)rotation_icon:(float)n { UIButton *history_btn= [self.view viewWithTag:<#(NSInteger)#>] ...

  6. 简谈ArrayList和LinkedList区别

    对于ArrayList和LinkedList,他们都实现了List接口,他们的区别大致为: ArrayList LinkedList (1)底层是数组,可以以O(1)的时间复杂度对元素进行随机访问 以 ...

  7. 50个实用的jQuery代码段让你成为更好的Web前端工程师

    本文会给你们展示50个jquery代码片段,这些代码能够给你的javascript项目提供帮助.其中的一些代码段是从jQuery1.4.2才开始支持的做法,另一些则是真正有用的函数或方法,他们能够帮助 ...

  8. SQL server 开启 cmdshell

    GO RECONFIGURE GO GO RECONFIGURE GO EXEC master..xp_cmdshell 'net use Z: \\192.168.11.1\192.168.11.4 ...

  9. iOS开发UI基础—手写控件,frame,center和bounds属性

    iOS开发UI基础—手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...

  10. usb.ids

    # # List of USB ID's # # Maintained by Vojtech Pavlik <vojtech@suse.cz> # If you have any new ...