c++编程题N皇后升级版

在N*N的格子中,放置N个皇后,要求每行每列必须有一个皇后,任意两个皇后不能在彼此45角度的斜对角位置,每个皇后可以看到所有其它的皇后。请输出放置的方案。
 
输入格式:一行一个整数,N,直至N=0
输出格式:如果有解,从第一行到第N行的顺序,输出皇后的列号(从1开始计数),列号之间有空格,如果有多种解,输出字典序最小的解;如果无解,输出“Impossible!!!”;每个有效的N的输出结果占据一个完整的行。
 
输入样例:
2
4
0
 
输出样例:
Impossible!!!
2 4 1 3

每个皇后可以看到所有其它的皇后,这句话是什么意思?最好写个输出样例

 

#include<stdio.h>

//#define MAXSIZE 20;
//int a[MAXSIZE][MAXSIZE];    //这种定义方式在Xcode中会报蜜汁错误:Unexpected ';' before ']'

int a[20][20];
int n;
int total;

int FindIndexOfOne(int row){    //找到第row行皇后的列数(从0开始计数)
    for(int col=0;col<n;col++){
        if(a[row][col]==1)return col;
    }
    return -1;
}

void PrintAns(){    //打印各行皇后的列数(从1开始计数)
    int row;
    for(row=0;row<n-1;row++){
        printf("%d ",FindIndexOfOne(row)+1);
    }
      printf("%d)\n",FindIndexOfOne(row)+1);
}

int NoAttack(int row,int col){    //检测row行col列位置放置的皇后是否不会被攻击
    for(int i=0-n;i<n;i++){
        if(row+i>=0&&row+i<n&&col+i>=0&&col+i<n&&a[row+i][col+i]==1)return 0;
        if(row+i>=0&&row+i<n&&a[row+i][col]==1)return 0;
        if(row+i>=0&&row+i<n&&col-i>=0&&col-i<n&&a[row+i][col-i]==1)return 0;
        if(col-i>=0&&col-i<n&&a[row][col-i]==1)return 0;
    }
    return 1;
}

void FindQueen(int row){    //算法核心
    if(row>=n){        //递归边界,此时已经求出一种解
        PrintAns();
        total++;
    }
    else{
        for(int col=0;col<n;col++){
            if(NoAttack(row,col)==1){
                a[row][col]=1;
                FindQueen(row+1);
                a[row][col]=0; 
            }
        }
    }
}

int main(){
    total=0;
    while(scanf("%d",&n)&&n){
        FindQueen(0);  
        if(total==0) printf("Impossible!!!");
        total=0;
    }
    return 0;
}

无法实现如果有多种解,输出字典序最小的解

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html