zoukankan      html  css  js  c++  java
  • POJ

    棋盘问题

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

    题目大意:

    在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。

    解题思路:

    简单dfs,按照列的顺序搜索,并使用vis标记每行是否有棋子。

    代码:

     1 #include <iostream>
     2 #include <stdio.h>
     3 using namespace std;
     4 #define debug(a) cout<<#a<<":"<<a<<endl;
     5 typedef long long ll;
     6 const int INF=1e9+7;
     7 const int N=1e6+7;
     8 const int mod=1e9+7;
     9 int maxn,minn;
    10 int T,n,k;
    11 int ans=0;
    12 int vis[100];
    13 char mp[100][100];
    14 
    15 void dfs(int a,int b){
    16     if(b==k){
    17         ans++;
    18         return ;
    19     }
    20     else if(a==n+1){
    21         return ;
    22     }
    23     for(int i=1;i<=n;i++){
    24         if(vis[i]==0&&mp[a][i]=='#'){
    25             vis[i]=1;
    26             dfs(a+1,b+1);
    27             vis[i]=0;
    28         }
    29     }
    30     dfs(a+1,b);
    31 }
    32 
    33 
    34 int main(){
    35     while(cin>>n>>k){
    36         ans=0;
    37         if(n==-1&&k==-1){
    38             break;
    39         }
    40         for(int i=1;i<=n;i++){
    41             scanf("%s",mp[i]+1);
    42         }
    43         dfs(1,0);
    44         cout<<ans<<endl;
    45     }
    46     
    47 
    48     return 0;
    49 }
  • 相关阅读:
    矿Mac必备软件
    PHP第六课 使用方法数组
    I/O概述和审查操作
    应用程序配置文件
    他毕业两年,博客一年,时间
    苹果公司的回复
    CImage类的介绍与使用
    数据库移植遇到的问题
    MP算法和OMP算法及其思想
    ROR 环境的 搭建
  • 原文地址:https://www.cnblogs.com/meanttobe/p/12519979.html
Copyright © 2011-2022 走看看