首页 > 代码库 > 八皇后

八皇后

  #include <stdio.h>

  #include <stdlib.h>

  int sum = 0;

  const int max=8;    //max为最大坐标 

  void show(int result[]){

  for(int i = 0; i < max; i++)

    {

       printf("(%d,%d) ", i, result[i]);

    }

    printf("/n");

    sum++;

  }

    int main(){

    int result[max];

    Queen(result, 0);    //从横坐标为0开始,依次尝试

    printf("total: %d enums./n", sum);

    system("pause");return 0;

}    //输出所有皇后的坐标

  bool check(int result[], int x){

  for(int i = 0; i < x; i++)    //检查横排以及对角线上能否放置皇后

  {

  if(result[i] == result[x] || abs(result[i] - result[x]) == (x - i))

   {

    return false;

    }

  }

  return true;

}    // 检查当前列能否放置皇后

void Queen(int result[], int x){

  if(x == max)

    {

        show(result);    //若全部摆好,则输出所有皇后坐标

        return;

    }    // 回溯尝试皇后位置,n为横坐标 

for(int i = 0; i < max; i++)

    {

        result[x] = i;    //将皇后摆到当前循环到的位置上

        if(check(result, x))

       {

           Queen(result, x + 1);    //否则继续摆放下一个皇后

       }

    }

}

八皇后