N皇后问题


#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
void exchange(int input[],int p,int q){
  int temp=input[p];
  input[p]=input[q];
  input[q]=temp;
}
int p(int input[],int check[],int start,int end){
  int i=0,j=0;
  if(start==end){
      // 测试是否是在y=-x+b上
      for(i=0;i<end;i++){
         check[i]=i+1+input[i];
      }
      sort(check,check+end);
      int num=check[0];
      for(j=1;j<end;j++){
          if(num==check[j]){
            return 0;
          }
          else{
            num=check[j];
          }
      }
      // 测试是否是在y=x+b上
      for(i=0;i<end;i++){
         check[i]=i+1-input[i];
      }
      sort(check,check+end);
      num=check[0];
      for(j=1;j<end;j++){
          if(num==check[j]){
            return 0;
          }
          else{
            num=check[j];
          }
      }
      // 测试通过打印结果
      for(i=0;i<end;i++){
          printf("%d",input[i]);
      }
      printf("\n");
  }
  for(int i=start;i<end;i++){
     exchange(input,start,i);
     p(input,check,start+1,end);
     exchange(input,start,i);
  }
}
int main(){
  int length,i,j;
  scanf("%d",&length);
  int input[100];
  int check[100];
  for(i=0;i<length;i++){
    input[i]=i+1;
    check[i]=i+1;
  }
  p(input,check,0,length);
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问题描述在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平、竖直、以及45度斜线上都不能出...
    thebigsilly阅读 2,269评论 0 0
  • 题目 n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。 给定一个整数n,返回所有不同的n皇后...
    六尺帐篷阅读 912评论 0 2
  • 题目 根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局。 样例比如n=4,存在2种解决方案 代码
    六尺帐篷阅读 224评论 0 1
  • 两个皇后之间是不能同行,不能同列,也不能同一条斜线(正反两条斜线)的。问一个n*n棋盘上面放置n个皇后有多少种放法?
    杰伦哎呦哎呦阅读 1,225评论 0 1
  • 听完【情绪】 【情绪】每一个人都有一个自己的世界 最近我们谈的话题是“情绪”。 情绪管理是精力管理的组成部分。 我...
    孜孜读毛选阅读 238评论 0 0

友情链接更多精彩内容