• n皇后问题


    /*n皇后问题*/
    #include <iostream>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<cmath>
    #include<string.h>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    #define maxn 1000
    int n,tot,col[maxn],vis[3][maxn];
    void search(int cur)
    {
        int i,j;
        if(cur==n)
        {
            tot++;
            printf("----解%d:----
    ",tot);
            for(i=0; i<n; i++)
            {
                printf("x = %d y = %d
    ",i,col[i]);
            }
            printf("
    ");
        }//递归边界。只要走到这所以皇后必然不冲突
        else for(i=0; i<n; i++)
            {
                //优化前:
                /*int ok=1;
                col[cur]=i;//尝试把第cur行的皇后放在第i列
                for(j=0; j<cur; j++)//检查是否和前面的皇后冲突
                    if(col[cur]==col[j]||cur-col[cur]==j-col[j]||cur+col[cur]==j+col[j])
                    {
                        ok=0;
                        break;
                    }
                if(ok)
                    search(cur+1);//如果合法,则继续递归*/
                //优化后:(回溯法)
                if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+n])
                //利用二位数组直接判断
                {
                    col[cur]=i;//如果不打印解,整个col数组都可以省略
                    vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=1;//修改全局变量
                    search(cur+1);
                    vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=0;//切记一定要改回来
                }
    
            }
    }
    int main()
    {
        while(scanf("%d",&n)==1)
        {
            tot=0;
            memset(vis,0,sizeof(vis));
            search(0);
            printf("共有解 %d 个
    ",tot);
        }
        return 0;
    }
    /*
    4
    ----解1:----
    x = 0 y = 1
    x = 1 y = 3
    x = 2 y = 0
    x = 3 y = 2
    
    ----解2:----
    x = 0 y = 2
    x = 1 y = 0
    x = 2 y = 3
    x = 3 y = 1
    
    共有解 2 个
    8
     ---省略----
         .
         .
         .
    ----解64:----
    x = 0 y = 4
    x = 1 y = 7
    x = 2 y = 3
    x = 3 y = 0
    x = 4 y = 6
    x = 5 y = 1
    x = 6 y = 5
    x = 7 y = 2
    
    ----解65:----
    x = 0 y = 5
    x = 1 y = 0
    x = 2 y = 4
    x = 3 y = 1
    x = 4 y = 7
    x = 5 y = 2
    x = 6 y = 6
    x = 7 y = 3
    
    ----解66:----
    x = 0 y = 5
    x = 1 y = 1
    x = 2 y = 6
    x = 3 y = 0
    x = 4 y = 2
    x = 5 y = 4
    x = 6 y = 7
    x = 7 y = 3
    
    ----解67:----
    x = 0 y = 5
    x = 1 y = 1
    x = 2 y = 6
    x = 3 y = 0
    x = 4 y = 3
    x = 5 y = 7
    x = 6 y = 4
    x = 7 y = 2
    
    ----解68:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 0
    x = 3 y = 6
    x = 4 y = 4
    x = 5 y = 7
    x = 6 y = 1
    x = 7 y = 3
    
    ----解69:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 0
    x = 3 y = 7
    x = 4 y = 3
    x = 5 y = 1
    x = 6 y = 6
    x = 7 y = 4
    
    ----解70:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 0
    x = 3 y = 7
    x = 4 y = 4
    x = 5 y = 1
    x = 6 y = 3
    x = 7 y = 6
    
    ----解71:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 4
    x = 3 y = 6
    x = 4 y = 0
    x = 5 y = 3
    x = 6 y = 1
    x = 7 y = 7
    
    ----解72:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 4
    x = 3 y = 7
    x = 4 y = 0
    x = 5 y = 3
    x = 6 y = 1
    x = 7 y = 6
    
    ----解73:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 6
    x = 3 y = 1
    x = 4 y = 3
    x = 5 y = 7
    x = 6 y = 0
    x = 7 y = 4
    
    ----解74:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 6
    x = 3 y = 1
    x = 4 y = 7
    x = 5 y = 4
    x = 6 y = 0
    x = 7 y = 3
    
    ----解75:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 6
    x = 3 y = 3
    x = 4 y = 0
    x = 5 y = 7
    x = 6 y = 1
    x = 7 y = 4
    
    ----解76:----
    x = 0 y = 5
    x = 1 y = 3
    x = 2 y = 0
    x = 3 y = 4
    x = 4 y = 7
    x = 5 y = 1
    x = 6 y = 6
    x = 7 y = 2
    
    ----解77:----
    x = 0 y = 5
    x = 1 y = 3
    x = 2 y = 1
    x = 3 y = 7
    x = 4 y = 4
    x = 5 y = 6
    x = 6 y = 0
    x = 7 y = 2
    
    ----解78:----
    x = 0 y = 5
    x = 1 y = 3
    x = 2 y = 6
    x = 3 y = 0
    x = 4 y = 2
    x = 5 y = 4
    x = 6 y = 1
    x = 7 y = 7
    
    ----解79:----
    x = 0 y = 5
    x = 1 y = 3
    x = 2 y = 6
    x = 3 y = 0
    x = 4 y = 7
    x = 5 y = 1
    x = 6 y = 4
    x = 7 y = 2
    
    ----解80:----
    x = 0 y = 5
    x = 1 y = 7
    x = 2 y = 1
    x = 3 y = 3
    x = 4 y = 0
    x = 5 y = 6
    x = 6 y = 4
    x = 7 y = 2
    
    ----解81:----
    x = 0 y = 6
    x = 1 y = 0
    x = 2 y = 2
    x = 3 y = 7
    x = 4 y = 5
    x = 5 y = 3
    x = 6 y = 1
    x = 7 y = 4
    
    ----解82:----
    x = 0 y = 6
    x = 1 y = 1
    x = 2 y = 3
    x = 3 y = 0
    x = 4 y = 7
    x = 5 y = 4
    x = 6 y = 2
    x = 7 y = 5
    
    ----解83:----
    x = 0 y = 6
    x = 1 y = 1
    x = 2 y = 5
    x = 3 y = 2
    x = 4 y = 0
    x = 5 y = 3
    x = 6 y = 7
    x = 7 y = 4
    
    ----解84:----
    x = 0 y = 6
    x = 1 y = 2
    x = 2 y = 0
    x = 3 y = 5
    x = 4 y = 7
    x = 5 y = 4
    x = 6 y = 1
    x = 7 y = 3
    
    ----解85:----
    x = 0 y = 6
    x = 1 y = 2
    x = 2 y = 7
    x = 3 y = 1
    x = 4 y = 4
    x = 5 y = 0
    x = 6 y = 5
    x = 7 y = 3
    
    ----解86:----
    x = 0 y = 6
    x = 1 y = 3
    x = 2 y = 1
    x = 3 y = 4
    x = 4 y = 7
    x = 5 y = 0
    x = 6 y = 2
    x = 7 y = 5
    
    ----解87:----
    x = 0 y = 6
    x = 1 y = 3
    x = 2 y = 1
    x = 3 y = 7
    x = 4 y = 5
    x = 5 y = 0
    x = 6 y = 2
    x = 7 y = 4
    
    ----解88:----
    x = 0 y = 6
    x = 1 y = 4
    x = 2 y = 2
    x = 3 y = 0
    x = 4 y = 5
    x = 5 y = 7
    x = 6 y = 1
    x = 7 y = 3
    
    ----解89:----
    x = 0 y = 7
    x = 1 y = 1
    x = 2 y = 3
    x = 3 y = 0
    x = 4 y = 6
    x = 5 y = 4
    x = 6 y = 2
    x = 7 y = 5
    
    ----解90:----
    x = 0 y = 7
    x = 1 y = 1
    x = 2 y = 4
    x = 3 y = 2
    x = 4 y = 0
    x = 5 y = 6
    x = 6 y = 3
    x = 7 y = 5
    
    ----解91:----
    x = 0 y = 7
    x = 1 y = 2
    x = 2 y = 0
    x = 3 y = 5
    x = 4 y = 1
    x = 5 y = 4
    x = 6 y = 6
    x = 7 y = 3
    
    ----解92:----
    x = 0 y = 7
    x = 1 y = 3
    x = 2 y = 0
    x = 3 y = 2
    x = 4 y = 5
    x = 5 y = 1
    x = 6 y = 6
    x = 7 y = 4
    
    共有解 92 个
    x = 1 y = 7
    x = 2 y = 3
    x = 3 y = 0
    x = 4 y = 2
    x = 5 y = 5
    x = 6 y = 1
    x = 7 y = 6
    
    ----解64:----
    x = 0 y = 4
    x = 1 y = 7
    x = 2 y = 3
    x = 3 y = 0
    x = 4 y = 6
    x = 5 y = 1
    x = 6 y = 5
    x = 7 y = 2
    
    ----解65:----
    x = 0 y = 5
    x = 1 y = 0
    x = 2 y = 4
    x = 3 y = 1
    x = 4 y = 7
    x = 5 y = 2
    x = 6 y = 6
    x = 7 y = 3
    
    ----解66:----
    x = 0 y = 5
    x = 1 y = 1
    x = 2 y = 6
    x = 3 y = 0
    x = 4 y = 2
    x = 5 y = 4
    x = 6 y = 7
    x = 7 y = 3
    
    ----解67:----
    x = 0 y = 5
    x = 1 y = 1
    x = 2 y = 6
    x = 3 y = 0
    x = 4 y = 3
    x = 5 y = 7
    x = 6 y = 4
    x = 7 y = 2
    
    ----解68:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 0
    x = 3 y = 6
    x = 4 y = 4
    x = 5 y = 7
    x = 6 y = 1
    x = 7 y = 3
    
    ----解69:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 0
    x = 3 y = 7
    x = 4 y = 3
    x = 5 y = 1
    x = 6 y = 6
    x = 7 y = 4
    
    ----解70:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 0
    x = 3 y = 7
    x = 4 y = 4
    x = 5 y = 1
    x = 6 y = 3
    x = 7 y = 6
    
    ----解71:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 4
    x = 3 y = 6
    x = 4 y = 0
    x = 5 y = 3
    x = 6 y = 1
    x = 7 y = 7
    
    ----解72:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 4
    x = 3 y = 7
    x = 4 y = 0
    x = 5 y = 3
    x = 6 y = 1
    x = 7 y = 6
    
    ----解73:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 6
    x = 3 y = 1
    x = 4 y = 3
    x = 5 y = 7
    x = 6 y = 0
    x = 7 y = 4
    
    ----解74:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 6
    x = 3 y = 1
    x = 4 y = 7
    x = 5 y = 4
    x = 6 y = 0
    x = 7 y = 3
    
    ----解75:----
    x = 0 y = 5
    x = 1 y = 2
    x = 2 y = 6
    x = 3 y = 3
    x = 4 y = 0
    x = 5 y = 7
    x = 6 y = 1
    x = 7 y = 4
    
    ----解76:----
    x = 0 y = 5
    x = 1 y = 3
    x = 2 y = 0
    x = 3 y = 4
    x = 4 y = 7
    x = 5 y = 1
    x = 6 y = 6
    x = 7 y = 2
    
    ----解77:----
    x = 0 y = 5
    x = 1 y = 3
    x = 2 y = 1
    x = 3 y = 7
    x = 4 y = 4
    x = 5 y = 6
    x = 6 y = 0
    x = 7 y = 2
    
    ----解78:----
    x = 0 y = 5
    x = 1 y = 3
    x = 2 y = 6
    x = 3 y = 0
    x = 4 y = 2
    x = 5 y = 4
    x = 6 y = 1
    x = 7 y = 7
    
    ----解79:----
    x = 0 y = 5
    x = 1 y = 3
    x = 2 y = 6
    x = 3 y = 0
    x = 4 y = 7
    x = 5 y = 1
    x = 6 y = 4
    x = 7 y = 2
    
    ----解80:----
    x = 0 y = 5
    x = 1 y = 7
    x = 2 y = 1
    x = 3 y = 3
    x = 4 y = 0
    x = 5 y = 6
    x = 6 y = 4
    x = 7 y = 2
    
    ----解81:----
    x = 0 y = 6
    x = 1 y = 0
    x = 2 y = 2
    x = 3 y = 7
    x = 4 y = 5
    x = 5 y = 3
    x = 6 y = 1
    x = 7 y = 4
    
    ----解82:----
    x = 0 y = 6
    x = 1 y = 1
    x = 2 y = 3
    x = 3 y = 0
    x = 4 y = 7
    x = 5 y = 4
    x = 6 y = 2
    x = 7 y = 5
    
    ----解83:----
    x = 0 y = 6
    x = 1 y = 1
    x = 2 y = 5
    x = 3 y = 2
    x = 4 y = 0
    x = 5 y = 3
    x = 6 y = 7
    x = 7 y = 4
    
    ----解84:----
    x = 0 y = 6
    x = 1 y = 2
    x = 2 y = 0
    x = 3 y = 5
    x = 4 y = 7
    x = 5 y = 4
    x = 6 y = 1
    x = 7 y = 3
    
    ----解85:----
    x = 0 y = 6
    x = 1 y = 2
    x = 2 y = 7
    x = 3 y = 1
    x = 4 y = 4
    x = 5 y = 0
    x = 6 y = 5
    x = 7 y = 3
    
    ----解86:----
    x = 0 y = 6
    x = 1 y = 3
    x = 2 y = 1
    x = 3 y = 4
    x = 4 y = 7
    x = 5 y = 0
    x = 6 y = 2
    x = 7 y = 5
    
    ----解87:----
    x = 0 y = 6
    x = 1 y = 3
    x = 2 y = 1
    x = 3 y = 7
    x = 4 y = 5
    x = 5 y = 0
    x = 6 y = 2
    x = 7 y = 4
    
    ----解88:----
    x = 0 y = 6
    x = 1 y = 4
    x = 2 y = 2
    x = 3 y = 0
    x = 4 y = 5
    x = 5 y = 7
    x = 6 y = 1
    x = 7 y = 3
    
    ----解89:----
    x = 0 y = 7
    x = 1 y = 1
    x = 2 y = 3
    x = 3 y = 0
    x = 4 y = 6
    x = 5 y = 4
    x = 6 y = 2
    x = 7 y = 5
    
    ----解90:----
    x = 0 y = 7
    x = 1 y = 1
    x = 2 y = 4
    x = 3 y = 2
    x = 4 y = 0
    x = 5 y = 6
    x = 6 y = 3
    x = 7 y = 5
    
    ----解91:----
    x = 0 y = 7
    x = 1 y = 2
    x = 2 y = 0
    x = 3 y = 5
    x = 4 y = 1
    x = 5 y = 4
    x = 6 y = 6
    x = 7 y = 3
    
    ----解92:----
    x = 0 y = 7
    x = 1 y = 3
    x = 2 y = 0
    x = 3 y = 2
    x = 4 y = 5
    x = 5 y = 1
    x = 6 y = 6
    x = 7 y = 4
    
    共有解 92 个
    
    */
  • 相关阅读:
    pandas DataFrame(5)-合并DataFrame与Series
    pandas Series的sort_values()方法
    np.corrcoef()方法计算数据皮尔逊积矩相关系数(Pearson's r)
    switch case 多个处理方式涉及到销售优惠折扣方案处理
    标量函数取规则名称
    调用企业微信接口发送消息
    C#中NameValueCollection类用法 读取配置信息
    .NET Datable分解数据表
    触发器批量业务操作实现方式 update触发器用游标处理
    Lamda OrderBy 排序问题
  • 原文地址:https://www.cnblogs.com/heqinghui/p/3204867.html
Copyright © 2020-2023  润新知