zoukankan      html  css  js  c++  java
  • POJ1321 棋盘问题(简单搜索)

    题意:

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

    Input:

    输入含有多组测试数据。
    每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
    当为-1 -1时表示输入结束。
    随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。

    Output:

    对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。

    Sample Input

    2 1
    #.
    .#
    4 4
    ...#
    ..#.
    .#..
    #...
    -1 -1

    Sample Output

    2
    1

    题解:

           八皇后问题的变形,回溯法解决。

    代码:

    #include <iostream>
    
    using namespace std;
    int n,k,maxn,sum;
    char a[9][9];
    
    int canplace(int r,int c)          //判断棋子能否放置。
    {
        int i;
        if(a[r][c]=='.') return 0;
        for(i=r-1;i>=0;i--)
            if(a[i][c]=='Q') return 0;
        for(i=c-1;i>=0;i--)
            if(a[r][i]=='Q') return 0;
        return 1;
    }
    
    void dfs(int m)
    {
        if(k==sum)       //当要求棋子数与放置的总数相同时,回溯。
        {
            maxn++;
            return ;
        }
        if(m>=n*n)       //当遍历完整个棋盘,回溯。
            return;
        else
        {
            int r,c;
            r=m/n;
            c=m%n;
            if(canplace(r,c))
            {
                a[r][c]='Q';
                sum++;
                dfs(m+1);
                a[r][c]='#';
                sum--;
            }
            dfs(m+1);
        }
    }
    
    int main()
    {
        int i,j;
        while(cin>>n>>k)
        {
            if(n==-1&&k==-1) break;
            maxn=0;
            sum=0;
            for(i=0;i<n;i++)
                for(j=0;j<n;j++)
                cin>>a[i][j];
            dfs(0);
            cout<<maxn<<endl;
        }
    
        return 0;
    }
  • 相关阅读:
    Nancy之静态文件处理
    Nancy之基于Self Hosting的补充小Demo
    Nancy之基于Nancy.Owin的小Demo
    Nancy之基于Nancy.Hosting.Self的小Demo
    Nancy之基于Nancy.Hosting.Aspnet的小Demo
    UEditor 1.4.3.1.NET版本上传配置备忘录
    ASP.NET MVC使用SSI来实现页面静态化
    CentOS7上让Jexus开机自启动
    遗传算法的简单应用-巡回旅行商(TSP)问题的求解
    遗传算法的简单应用-求解方程
  • 原文地址:https://www.cnblogs.com/y1040511302/p/10177911.html
Copyright © 2011-2022 走看看