zoukankan      html  css  js  c++  java
  • poj 1321 棋盘问题(dfs)

    题目链接:http://poj.org/problem?id=1321

            按行搜索,当前棋格所在列无棋子且当前位置可放棋子时搜索下一位置(k-1)。若当前行无法放置,搜索下一行(k)。

    代码:

    #include<iostream>
    #include
    <cstring>
    using namespace std ;
    char a[8][8] ;
    bool b[8] ;             //记录第i列是否放了棋子
    int count, n ;
    int dfs(int r, int k){
        
    if(k==0){           //所有棋子放完则产生一个新方案
            count ++ ;
            
    return count ;
        }
        
    if(r>=n)    return count ;      //搜索完毕
        for(int j=0; j<n; j++){
            
    if(b[j]&&a[r][j]=='#'){
                b[j] 
    = false ;
                dfs(r
    +1, k-1) ;
                b[j] 
    = true ;           //回溯
            }
        }
        dfs(r
    +1, k) ;
    }

    int main(){
        
    int k, i, j ;
        
    while(true){
            cin 
    >> n >> k ;
            
    if(n==-1&&k==-1)    break ;
            count 
    = 0 ;
            
    for(i=0; i<n; i++){
                
    for(j=0; j<n; j++){
                    cin 
    >> a[i][j] ;
                }
            }
            memset(b, 
    truesizeof(b)) ;
            cout 
    << dfs(0, k) << endl ;
        }
        
    return 0 ;
    }
  • 相关阅读:
    [Java] [Exception]
    [Go back to REDIS]
    [Java] [内存泄露]
    [ZK] [Related Materials]
    [Scala] [Coursera]
    <zk在大型分布式系统中的应用>
    [Java] [Lock] [Synchronized VS ReentrantLock]
    [Data Structure] Tree
    投影矩阵的计算过程
    SQL Server 2012
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2162544.html
Copyright © 2011-2022 走看看