八皇后问题,c,c++

#include <stdio.h>

int solution = 1;
int chess[8];

//根据前面几行的放子情况

//检查这一行放子是否合法
int attack(int n)
{
 int i;
 for (i=1;i<n;i++)
 {
  if(chess[n]==chess[i]+(n-i)||
     chess[n]==chess[i]-(n-i)||
     chess[n]==chess[i])
     return 0;
 }
 return 1;
}

//输出每种可行解
void display()
{
 int i;
 printf_s("solution %d:\n",solution);
 for (i=1;i<=8;i++)
 {
  printf_s(" %d",chess[i]);
 }
  printf_s("\n");
  ++solution;
}

//递归求函数
void putchess(int n)
{
 int i;

//从第n行第一格(i)开始放棋子
 for (i=1;i<9;i++)
 {
  chess[n] = i;
  if (attack(n) == 1)
  {
   if (n == 8)
   {
    display();//放满,输出解
   }
   else
   {
    putchess(n+1);//没放满,即放下一行
   }
  }
 }
}
int main()
{
 printf_s("八皇解决问题如下:\n");
 putchess(1);
 return 0;
}

你可能感兴趣的:(C++,c)