当前位置: 首页 >> 程序设计 >> 数据结构和算法 >> n皇后问题编程
 

n皇后问题编程

作者:      来源:zz     发表时间:2006-06-12     浏览次数:      字号:    

#include <stdio.h>
#include <malloc.h>

int queen(int n)
{
  int *q = (int *)malloc(sizeof(int) * (n + 1));
  int i, j, num = 0;
  for (q[0] = 0, i = 1; i < n + 1; ++i)
    q[i] = 1;
  i = 1;
  while ((q[1] <= n / 2) || ((n % 2) && (q[2] < n / 2)))
  {
    if (i > n)
    {
      printf("\n第%d种可行的情况是:\n", ++num);
      for (j = 1; j < i; ++j)
        printf("在第%d行,把棋放在第%d位。\n", j, q[j]);
      printf("\n第%d种可行的情况是:\n", ++num);
      for (j = 1; j < i; ++j)
        printf("在第%d行,把棋放在第%d位。\n", j, n - q[j] + 1);
      if (num % 10 == 0)
        getchar();
      ++(q[--i]);
    }
    else
    {
      for (j = 1; j < i; ++j)
        if ((q[i] == q[j]) || ((q[i] - q[j]) == (i - j)) || ((q[i] - q[j]) == (j - i)))
        {
          ++(q[i]);
          j = 0;
        }
      if (q[i] > n)
      {
        q[i] = 1;
        ++(q[--i]);
      }
      else
        ++i;
    }
  }
  free(q);
  return num;
}

int main (void)
{
  puts("请输入n的大小:");
  int n;
  scanf("%d", &n);
  getchar();
  printf("\n\n一共有%d种可能情况,已全部列出!\n", queen(n));
  getchar();
  return 0;
}

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •