码迷,mamicode.com
首页 > 其他好文 > 详细

八皇后

时间:2016-10-14 20:26:41      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

  #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);    //否则继续摆放下一个皇后

       }

    }

}

八皇后

标签:

原文地址:http://www.cnblogs.com/z-y-y/p/5961420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!