zoukankan      html  css  js  c++  java
  • 搜索算法:深度优先搜索(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 }
  • 相关阅读:
    js内置对象
    js对象
    js函数
    js数组
    fetch
    vue按需引入element或mint
    nginx跳转访问
    webstrom vue项目让局域网访问
    Vue+Highcharts完全使用
    HighCharts使用更多图表HighChartsMore
  • 原文地址:https://www.cnblogs.com/GodA/p/5568306.html
Copyright © 2011-2022 走看看