zoukankan      html  css  js  c++  java
  • poj 1321

    思路:有点枚举的意思  基本的分支限界

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int a[11];
    char map[11][11];
    int n,k;
    int sum;
    void dfs(int t,int x)// 行号 需要放置的皇后数
    {
        int i,j;
        if(x==0)
        {
            sum++;
            return ;
        }
        if(t>n)
            return ;
        
        dfs(t+1,x);//这一行不放棋子
        for(i=1;i<=n;i++)//第t行的棋子放到第几列
        {
            if(map[t][i]=='.')//不能放旗子
                continue;
            for(j=1;j<=k-x;j++)//k-x  表示已经方的棋子
                if(a[j]==i)//如果以前的第j颗棋子放到第i列 那么与当前的棋子发生冲突 不可行
                    break;
            if(j<=k-x)//已经发生冲突
                continue;
            a[k-x+1]=i;
            dfs(t+1,x-1);
        }
    }
    int main()
    {
        int i,j;
        while(scanf("%d%d",&n,&k)!=EOF)
        {
            sum=0;
            if(n==-1&&k==-1)
                break;
            for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                cin>>map[i][j];
            dfs(1,k);
            cout<<sum<<endl;
        }
        return 0;
    }
  • 相关阅读:
    算法之递归
    初读 c# IL中间语言
    sql语句转为Model
    WPF-悬浮窗(类似于360)
    call,apply
    作用域题目
    css BFC
    数组扁平化 flatten
    常见的异步题
    setTimeout、Promise、Async/Await 的区别
  • 原文地址:https://www.cnblogs.com/zhangdashuai/p/4422932.html
Copyright © 2011-2022 走看看