搜索算法:深度优先搜索(DFS)

Posted Alinshans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索算法:深度优先搜索(DFS)相关的知识,希望对你有一定的参考价值。

  关于深搜的介绍,在网上有很多,不再赘述。主要以题目形式实例讲解。

  POJ - 1321http://poj.org/problem?id=1321

  题目大意:给出一个棋盘,棋子不能同行同列,求放棋子的可行方案数。

  题目思路:给的数据非常小,n<=8,非常简单的一道深搜题。需要放k行,按行递增递归,找到行中可以放的点,然后往下搜,直到把棋子放完,方案数就加一。只要设置一个col[]数组保存已经放过的列,找到一个点,col[i]置为1,返回上一层是col[i]置回0。

  代码:(http://paste.ubuntu.com/17087895/

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 int col[10],n,k,ans;
 5 char a[10][10];
 6 void dfs(int row,int num)
 7 {    
 8     for(int i=0;i<n;i++)
 9     {
10         if(a[row][i]==# && !col[i])
11         {
12             if(num == 1)
13                 ans++;
14             else
15             {
16                 col[i] = 1;
17                 for(int j=row+1;j<n-num+2;j++)
18                     dfs(j,num-1);
19                 col[i] = 0;
20             }
21         }
22     }
23 }
24 int main()
25 {
26     int i,j;
27     while(cin>>n>>k && n>0 && k>0)
28     {
29         for(i=0;i<n;i++)
30             for(j=0;j<n;j++)
31                 cin>>a[i][j];
32         memset(col,0,sizeof(col));
33         ans = 0;
34         for(i=0;i<n-k+1;i++)
35             dfs(i,k);
36         cout<<ans<<endl;
37     }
38 }

 

以上是关于搜索算法:深度优先搜索(DFS)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法图遍历算法 ( 深度优先搜索 DFS | 深度优先搜索和广度优先搜索 | 深度优先搜索基本思想 | 深度优先搜索算法步骤 | 深度优先搜索理论示例 )

基本算法——深度优先搜索(DFS)和广度优先搜索(BFS)

算法|图的遍历-深度优先搜索(DFS)

算法入门深度优先搜索(DFS)

16-DFS(深度优先搜索算法)

算法-03 | 深度优先DFS| 广度优先BFS