dfs算法是深度搜索算法。从某一节点开始遍历直至到路径底部,如果不是所寻找的,则回溯到上个节点后,再遍历其他路径。不断重复这个过程。一般此过程消耗很大,需要一些优化才能保持算法的高效。

  hdu1010:(奇偶剪枝)

    主要题意是一只小狗为了一块骨头,然后进入迷宫。当它拿起骨头的时候,迷宫开始下沉。小狗才发这迷宫是个陷阱。这迷宫只有一个门,小狗只能在规定时间内跑到到门这里才能顺利出逃。另外,小狗每跑过一块,该块就会下沉。因此不能过早或者过晚到门。(题目挺有意思)

    刚开始刷题时,没有用剪枝,超时了。使用奇偶剪枝+dfs后,可以直接过。奇偶剪枝的内容可以百度。

    

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
/*
'X': a block of wall, which the doggie cannot enter;
'S': the start point of the doggie;
'D': the Door;
'.': an empty block.
*/ int n,m,t;
bool flag = false;
int doorI,doorJ;
char blocks[][];
bool isEnd(int curI,int curJ,int curT)
{
if(flag) return true;
if(curT > t) return true;
if(curT == t)
{
if(curI == doorI && curJ == doorJ)
flag = true;
return true;
}
if(curI < || curJ < || curI >= n || curJ >=m)
return true;
if(blocks[curI][curJ] == 'X') return true;
if(curI==doorI && curJ == doorJ) return true;
return false;
}
void dfs(int curI,int curJ,int curT)
{
if(isEnd(curI,curJ,curT)) return;
char temp = blocks[curI][curJ];
blocks[curI][curJ] = 'X';
dfs(curI-,curJ,curT+);
dfs(curI+,curJ,curT+);
dfs(curI,curJ-,curT+);
dfs(curI,curJ+,curT+);
blocks[curI][curJ] = temp;
} int main()
{
while(~scanf("%d%d%d",&n,&m,&t),n&&m&&t)
{
flag = false;
int startI=,startJ=;
for(int i=;i<n;++i)
{
scanf("%s",blocks[i]);
for(int j=;j<m;++j)
if(blocks[i][j]=='S')
startI = i,startJ = j;
else if(blocks[i][j]=='D')
doorI = i,doorJ = j;
}
//ΌτΦ¦
if(abs(startI-doorI)+abs(startJ-doorJ)> t ||(startI + startJ + doorI + doorJ + t)%)
{
printf("NO\n");
continue;
}
dfs(startI,startJ,);
if(flag) printf("YES\n");
else printf("NO\n");
}
return ;
}

  hdu2553:(简单题)

    N皇后问题,使用dfs一次性把1到10的值算出来,然后直接输出Hash[n]就行了,否则会超时。

 

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; int cnt;
int n; //n不大于10
int f[];
int Hash[];
bool isEnd(int curI)
{
for(int i=;i<curI-;++i)
if(f[curI-]==f[i]||
f[curI-]-f[i]==curI-i-||
f[i]-f[curI-]==curI-i-)
return true;
if(curI == n)
{
++cnt;
//注释的是输出代码,可以打开注释,看具体的输出
/*for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)
{
if(f[i] == j) printf("1 ");
else printf("0 ");
}
printf("\n");
}
printf("\n");
*/
return true;
}
return false; }
void dfs(int curI)
{
if(isEnd(curI)) return;
for(int j=;j<n;++j)
{
f[curI] = j;
dfs(curI+);
}
}
int main()
{
for(n=;n<=;++n)
{
cnt = ;
memset(f,,sizeof());
dfs();
Hash[n] = cnt;
}
while(~scanf("%d",&n),n)
{
printf("%d\n",Hash[n]);
}
return ;
}

算法之dfs篇的更多相关文章

  1. 一步步教你轻松学支持向量机SVM算法之案例篇2

    一步步教你轻松学支持向量机SVM算法之案例篇2 (白宁超 2018年10月22日10:09:07) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  2. 一步步教你轻松学支持向量机SVM算法之理论篇1

    一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  3. 一步步教你轻松学朴素贝叶斯模型算法Sklearn深度篇3

    一步步教你轻松学朴素贝叶斯深度篇3(白宁超   2018年9月4日14:18:14) 导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果.所以很受欢迎,对 ...

  4. 启xin宝app的token算法破解——frida篇(四)

    前两篇文章分析该APP的抓包.的逆向: 启xin宝app的token算法破解--抓包分析篇(一) 启xin宝app的token算法破解--逆向篇(二) 启xin宝app的token算法破解--toke ...

  5. 算法---FaceNet理论学习篇

    FaceNet算法-理论学习篇 @WP20190228 ==============目 录============ 一.LFW数据集简介 二.FaceNet算法简介 FaceNet算法=MTCNN模型 ...

  6. C#算法设计排序篇之04-选择排序(附带动画演示程序)

    选择排序(Selection Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/681 访问. 选择排序是一种简 ...

  7. 图的深度优先遍历算法(DFS)

    搜索算法有很多种,本次文章主要分享图(无向图)的深度优先算法.深度优先算法(DFS)主要是应用于搜索中,早期是在爬虫中使用.其主要的思想有如下: 1.先访问一个节点v,然后标记为已被访问过2.找到第一 ...

  8. Python数据结构与算法设计总结篇

    1.Python数据结构篇 数据结构篇主要是阅读[Problem Solving with Python]( http://interactivepython.org/courselib/static ...

  9. 图的遍历算法:DFS、BFS

    在图的基本算法中,最初需要接触的就是图的遍历算法,根据访问节点的顺序,可分为深度优先搜索(DFS)和广度优先搜索(BFS). DFS(深度优先搜索)算法 Depth-First-Search 深度优先 ...

随机推荐

  1. Python基础-while

    使用while循环实现输出2-3+4-5+6.....+100的和. i = 2 sum=0 while i<=100: if i % 2 == 0: sum += i else: sum -= ...

  2. linux 头文件和库文件的设置

    GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径.自己指定的路径就不说了,这里说明一下系统自动搜索的路径. [1]include头文件路径 除了默认的/us ...

  3. [数据结构]C#顺序表的实现

    在数据结构的学习当中,想必C++可能是大家接触最多的入门语言了 但是C#的数据结构却很少看到,今天我写了一个C#顺序表的顺序存储结构 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是 ...

  4. python在Linux中安装虚拟环境,区别python2和python3,分别安装模块

    安装虚拟环境的时候遇到的问题,解决的过程很闹心,在这里简单直接的分享出来,就是为了解决问题.  安装虚拟环境(须在联网状态下) $ sudo pip install virtualenv $ sudo ...

  5. route 详解

    语法: [root@test root]# route [-nee] [root@test root]# route add [-net|-host]目标主机或网域[netmask] [gw|dev] ...

  6. iptables防火墙原理详解+mysql pt工具

    http://seanlook.com/2014/02/23/iptables-understand/

  7. MVC.Net: jqueryval错误

    当使用Mvc.net创建Create表单后,firebug Create页面会出现404 Not Found - http://192.168.3.95:7001/bundles/jqueryval& ...

  8. 新的HTML5语义元素

    先看一个传统的HTML4的文档: <div class="header"> <h1>My Site Name</h1> <h2>My ...

  9. PHP array_diff_key()

    定义和用法 array_diff_key() 函数返回一个数组,该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键. 语法 array_diff_key(array1,array2,ar ...

  10. AspNet MVC4 教学-27:Asp.Net MVC4 自己定义helper及function的高速Demo

    A.创建Basic类型项目. B.创建App_Code目录,在里面创建2个cshtml文件: MyHelper.cshtml: @helper MyTruncate(string input, int ...