回溯法浅谈

Posted wolf940509

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回溯法浅谈相关的知识,希望对你有一定的参考价值。

回溯法是初学者学习暴力法的第一个障碍,所谓回溯就是指当把问题分成若干步骤并递归求解时,如果当前步骤没有合法选择,则函数将返回上一级递归调用,这种现象称为回溯。正是因为这个原因,递归枚举算法常被称为回溯法,应用十分普遍。

八皇后问题

技术分享
 1 int tot=0;
 2 int c[maxn];  //c[x]表示x行所在的列数
 3 void dfs(int n,int cur){
 4     if(cur==n) ++tot;
 5     for(int i=0;i<n;i++){
 6         int flag=0;
 7         c[cur]=i;
 8         for(int j=0;j<cur;j++)
 9             if(c[cur]==c[j]||(cur-c[cur]==j-c[j])||(cur+c[cur]==j+c[j])){
10                 flag=1; break;
11             }
12         if(!flag)
13             dfs(n,cur+1);
14     }
15 }
View Code

 

以上是关于回溯法浅谈的主要内容,如果未能解决你的问题,请参考以下文章

浅谈 DFS(回溯算法)Dijkstra 算法Bellman-Ford 算法

浅谈复盘的几个要素

浅谈Mybatis

算法浅谈——走迷宫问题与广度优先搜索

浅谈AngularJS中的$parse和$eval

浅谈zkw线段树(by Shine_hale)