⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queen8.cpp

📁 八皇后问题
💻 CPP
字号:
#include <iostream>
#define  n  8   // n为皇后个数,m为摆法计数
using namespace std;
int m=0,a[n];
int check(int i2,int j2)//检验是否有棋子 
{int ok2;
ok2=0;
if(a[j2]!=i2){
ok2=1;
}
return ok2;
}    
int ok(int i, int j) //检查(i,j)上能否放棋子
{  int i1,j1,ok1;
   i1=i;j1=j;ok1=1;  //检查第i行上能否放棋子
  while( (j1>1)&&ok1)
       {j1--; ok1=check(i1,j1);}
   j1=j; i1=i;    //检查对角线上能否放棋子
  while( (j1>1)&&(i1>1)&&ok1) 
       {j1--; i1--; ok1=check(i1,j1);} 
   j1=j; i1=i;     //检查另一对角线上能否放棋子
   while( (j1>1)&&(i1<n)&&ok1) 
         {j1--; i1++; ok1=check(i1,j1);}
   return  ok1;
}
void queen(int j) //从第j列开始逐个试探
{  int i;
if (j>n) 
      { m++;  printf("m=%d  ",m);
         for (i=1;i<=n;i++)  printf("  %d",a[i]);
         printf("\n");
       }    
   else  for( i=1; i<=n;i++)
             {if(ok(i,j))  //检查(i,j)上能否放棋子
                { a[j]=i; //在(i,j)上放一个棋子
                   queen(j+1) ;
                 } 
              
}
main()
  { // a[i]存放第i个皇后放置的行号,
  queen(1);
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -