目录
目录
P1219 [USACO1.5]八皇后 Checker Challenge
深度优先搜索
基本概念
深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。
算法思想
回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
//模板
void dfs(int step)
{
判断边界
{
相应操作
}
尝试每一种可能
{
满足check条件
标记
继续下一步dfs(step+1)
恢复初始状态(回溯的时候要用到)
}
}
P1706 全排列问题
#include<stdio.h>
#include<string.h>
int a[15];
int b[15];
int n;
void dfs(int);
int main()
{
scanf("%d",&n);
dfs(1);
return 0;
}
void dfs(int m)
{
int j;
if(m==n+1) //边界,输出
{
for(int i=1;i<=n;i++)
printf("%5d",a