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;
        }
    }

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

  • 相关阅读:
    xplan.sql(本脚本获取执行计划显示执行顺序)
    闪回查询(SELECT AS OF)
    闪回事务查询
    闪回版本查询
    闪回数据库
    shell循环语句
    前后端交互json字符串
    element vuex 语音播报
    highcharts中数据列点击事件
    highcharts为X轴标签添加链接
  • 原文地址:https://www.cnblogs.com/jokerspace/p/7078549.html
Copyright © 2011-2022 走看看