不知道为什么~除了我室友其他的同学都觉得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. 转: Android异步加载图像小结

    转:http://blog.csdn.net/sgl870927/article/details/6285535 研究了android从网络上异步加载图像,现总结如下: (1)由于android UI ...

  2. jquery解析XML(1)

    jquery解析XML文件 html代码 <!DOCTYPE html><html><head><title>解析XML</title>&l ...

  3. MySQL字符串中数字排序的问题

    1.select * from table where 1   order by id*1 desc; 2.select * from table where 1 order by id+0 desc ...

  4. (转载)StringGrid常用属性和常用操作

    Delphi StringGrid常用属性和常用操作 StringGrid组件用于建立显示字符串的网格,与电子表格相似.它可使表格中的字符串和相关对象操作简单化.StringGrid组件提供了许多可控 ...

  5. 【原】jQuery编写插件

    分享一下编写设置和获取颜色的插件,首先我将插件的名字命名为jquery.color.js.该插件用来实现以下两个功能1.设置元素的颜色.2.获取元素的颜色. 先在搭建好如下编写插件的框架: ;(fun ...

  6. C++程序的编写和实现

    C++程序的编写和实现 一个程序从编写到最后得到运行结果要经历以下一些步骤. 1. 用C++语言编写程序 用高级语言编写的程序称为“源程序”(source program).C++的源程序是以.cpp ...

  7. Form Post

    1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在jsp的前端页面写:有两种方法,一种是用submit提交.一种是用button提交.方法一: 在jsp的前端页面的 ...

  8. forward:hello 与 redirect:hello的区别

    对于某些Controller的处理方法,当返回值为String类型时,返回的结果中可能含有forward或redirect前缀: 如: @Controller @RequestMapping(&quo ...

  9. 在ubuntu 10.04下编译ffmpeg

    最近准备研究ffmpeg-2.0.1. 那得先运行起来看看效果吧. 首先去官网下载源码: 然后 解压=> ./configure => make  OK . 1. 编译好后,发现没有ffp ...

  10. Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderListener(Maven工程)

    Eclipse中tomcat部署工程启动后报错: 严重: Error configuring application listener of class org.springframework.web ...