深度优先搜索---一个懵逼的东东
作者:互联网
深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.(来自百度百科)
先解释以下深度:
深度指在搜索的过程中沿着一条路一直向下进行,直到这条路没有下一个节点停止,然后返回到上一步接着进行上述操作
所以深度优先搜索的整体结构就是:
1.递归2.剪枝
可能这样说有点不清楚,举个例子
打印1-4的全排列开头为1和2的所有序列;
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
上述是由编译器进行深搜算法打印的1-4的全排列开头为1和2的所有序列
下面是运行的代码
#include<bits/stdc++.h> using namespace std; int n,pd[100],used[100];//pd是判断是否用过这个数 void print()//输出函数 { int i; for(i=1;i<=n;i++) printf("%5d",used[i]);//保留五位常宽 cout<<endl; } void dfs(int k)//深搜函数,当前是第k格 { int i; if(k==n) //填满了的时候 { print();//输出当前解 return; } for(i=1;i<=n;i++)//1-n循环填数 { if(!pd[i])//如果当前数没有用过 { pd[i]=1;//标记一下 used[k+1]=i;//把这个数填入数组 dfs(k+1);//填下一个 pd[i]=0;//回溯 } } } int main() { cin>>n; dfs(0);//注意,这里是从第0格开始的! return 0; }View Code
标签:优先,int,东东,搜索,pd,深度,100 来源: https://www.cnblogs.com/RE-TLE/p/11392688.html