• (简单) POJ 1321 棋盘问题,回溯。


      Description

      在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
     
      标准的回溯的问题,直接按行递归,就像八皇后的递归。
     
    代码如下:
    #include<iostream>
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    
    using namespace std;
    
    int n,k;
    int map1[10][10];
    int remi[10],remj[10];
    int ans;
    int cou;
    
    bool judge(int x,int y)
    {
        for(int i=0;i<cou;++i)
            if(remj[i]==y)
                return 0;
    
        return 1;
    }
    
    void dfs(int cur,int hang)
    {
        if(cur==k)
        {
            ++ans;
            return;
        }
    
        for(int i=hang;i<=n;++i)
        {
            if(n-i+1<k-cur)
                break;
    
            for(int j=1;j<=n;++j)
                if(map1[i][j]&&judge(i,j))
                {
                    remi[cou]=i;
                    remj[cou++]=j;
                    dfs(cur+1,i+1);
                    --cou;
                }
        }
    }
    
    int main()
    {
        char c,s[20];
        
        ios::sync_with_stdio(false);
    
        for(cin>>n>>k;n!=-1&&k!=-1;cin>>n>>k)
        {
            ans=0;
            cou=0;
            for(int i=1;i<=n;++i)
            {
                cin>>s;
    
                for(int j=1;j<=n;++j)
                {
                    c=s[j-1];
                    if(c=='#')
                        map1[i][j]=1;
                    else
                        map1[i][j]=0;
                }
            }
    
            dfs(0,1);
    
            cout<<ans<<endl;
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    [转]数据类型和Json格式
    maven 配置阿里云仓库
    maven windows 环境变量
    jdk windows环境变量
    springcloud hystrix 部分参数整理
    springboot 解决 woff2、ttf 跨域无法解析问题
    centos7 mysql5.7 rpm 安装
    centos7.3 chrome 安装
    springboot 1.5.X junit测试
    centos7 配置ftp访问
  • 原文地址:https://www.cnblogs.com/whywhy/p/4228055.html
Copyright © 2020-2023  润新知