dfs和回溯法的应用以及模板

来源:互联网 发布:牛津纺衬衫搭配知乎 编辑:程序博客网 时间:2024/06/04 00:30

一:此种方法适合解决的问题是深度优先遍历和回溯

void dfs(参数){if(搜到了){计数或进行其他操作;return;}for(查找当前节点的周围的节点){进行其他的操作;标记已经搜索过的节点;dfs(下一次搜索的节点);取消标记;}}   

例如求1~N的全排列问题


#include<stdio.h>#include<iostream.h>int a[6];int k=0;int ans=0;void dfs(int x){if(x==4){ans++;return;}for(int i=1;i<=5;i++){if(a[i]){ a[i]=0; dfs(x+1); a[i]=1;}}}int main(){for( k=0;k<6;k++)a[k]=1;dfs(0);printf("%d\n",ans);return 0;

}

此种思路是解决一些搜索问题的很重要的思想,如八皇后问题,还有一些可以转化为相似的问题。



原创粉丝点击