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

    题目地址:http://poj.org/problem?id=1321

    题目大意:给定正方形棋盘的边长与棋子数目,棋盘内只有特定形状的位置能放棋子,要求计算出将每个棋子以不同列不同行的方式放在能放棋子的位置的方案总数。

    how:简单的深搜,确定好递归条件和函数弹回条件。

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    
    using namespace std;
    
    char a[500][500];
    int flag[500];
    
    int n,k,m;//m是已经放了的棋子数目
    int ans;
    
    void dfs(int s){
        if(k==m){
            ans++;
            return;
        }
        if(s>=n)
            return;//以上两条都是回弹条件
        for(int j=0;j<n;j++)
        if(flag[j]==0&&a[s][j]=='#'){//递归的条件,一般深搜我喜欢用标志数组记录访问过的位置,并且在回弹后,清楚访问记录
            m++;
            flag[j]=1;
            dfs(s+1);
            flag[j]=0;
            m--;
        }
        dfs(s+1);//另起一行
    
    }
    int main(){
    
        while(scanf("%d%d",&n,&k)&&n!=-1&&k!=-1){
                m=0;
                ans =0;
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    cin>>a[i][j];
                }
            }
            memset(flag,0,sizeof(flag));
            dfs(0);
            cout<<ans<<endl;
        }
    }

    暑假修炼之路,从水题开始做起~

  • 相关阅读:
    bzoj1066: [SCOI2007]蜥蜴
    bzoj3504: [Cqoi2014]危桥
    bzoj2756: [SCOI2012]奇怪的游戏
    bzoj1570: [JSOI2008]Blue Mary的旅行
    Ultra-QuickSort
    Bin Packing
    Watering Grass
    区间覆盖
    抄书 Copying Books UVa 714
    分馅饼 Pie
  • 原文地址:https://www.cnblogs.com/jokerspace/p/7078549.html
Copyright © 2011-2022 走看看