zoukankan      html  css  js  c++  java
  • 1217 棋盘问题

    #include<bits/stdc++.h>
    using namespace std;
    int n,k,sum;
    char mp[10][10];
    bool l[10];
    
    void dfs(int x,int y){
        if(y>=k){
            sum++;
            return ;
        }//每摆完一组棋子,方案加一,回溯
        
        for(int i=x;i<n;i++){//从第x行开始,因为先前摆过的行不需要重复考虑 
            for(int j=0;j<n;j++){//列的遍历需要从0开始 
                if(!l[j] && mp[i][j]=='#'){//判定条件:1.列上没有棋子 2.棋子必须在棋盘上 
                    l[j]=true;
                    dfs(i+1,y+1);
                    l[j]=false;//搜索完了记得恢复 
                }
            }
        } 
    }
    int main(){
        while(1){
            cin>>n>>k;
            getchar();
            if(n==-1 && k==-1) break;//结束条件 
            memset(mp,false,sizeof(mp));//初始化 
            memset(l,false,sizeof(l));
            for(int i=0;i<n;i++) cin>>mp[i];//输入棋盘 
            sum=0;//初始方案 
            dfs(0,0);//first 0 :棋子所在行数 second 0 :第几个棋子
            cout<<sum<<endl; 
        } 
        return 0;
    }
  • 相关阅读:
    590. N 叉树的后序遍历
    CF605E
    网络流水题题单
    wqs二分的边界
    luoguP6326 Shopping
    【THUWC2020】工资分配
    CF1336简要题解
    「PKUWC2020」最小割
    洛谷P4895 独钓寒江雪
    省选联考2020简要题解
  • 原文地址:https://www.cnblogs.com/qwn34/p/13768232.html
Copyright © 2011-2022 走看看