八皇后问题求解

enjoy注重形象

enjoy注重形象

2016-02-19 12:39

下面是个简单易学的八皇后问题求解教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!
/************************************************************************/
  /* */
  /* 问题: 在8×8的国际象棋棋盘上放置8个皇后,要求任意两个皇后 */
  /* 不能在同一行、同一列或同一条对角线上。 */
  /* */
  /* 本程序使用递归-回溯法求解8皇后问题。Visual C++ 6.0 调试通过。 */
  /* 作者 晨星 2002年5月9日 */
  /* */
  /************************************************************************/
  
  #include stdio.h
  #include conio.h
  #include math.h
  
  #define QUEENS 8
  
  int iCount = 0;
  
  int Site[QUEENS];
  
  void Queen(int n);
  
  void Output();
  
  int IsValid(int n);
  
  /*----------------------------Main:主函数。----------------------------*/
  void main()
  { 
  Queen(0);
  
  getch();
  }
  
  /*-----------------Queen:递归放置第n个皇后,程序的核心!----------------*/
  void Queen(int n)
  {
  int i;
  
  if(n == QUEENS)
  {
  Output();
  return;
  }
  
  for(i = 1 ; i = QUEENS ; i++)
  {
  Site[n] = i;
  
  if(IsValid(n))
  Queen(n + 1);
  }
  }
  
  /*------IsValid:判定第n个皇后放上去之后,是否合法,即是否无冲突。------*/
  int IsValid(int n)
  {
  int i;
  
  for(i = 0 ; i n ; i++)
  {
  if(Site[i] == Site[n])
  return 0;
  
  if(abs(Site[i] - Site[n]) == (n - i))
  return 0;
  }
  
  return 1;
  }
  
  /*------------Output:输出一个解,即一种没有冲突的放置方案。------------*/
  void Output()
  {
  int i;
  
  printf( "No.%-5d " , ++iCount);
  
  for(i = 0 ; i QUEENS ; i++)
  printf( "%d " , Site[i]);
  
  printf( " ");
  }
  
展开更多 50%)
分享

猜你喜欢

八皇后问题求解

编程语言 网络编程
八皇后问题求解

八皇后问题

编程语言 网络编程
八皇后问题

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

九宫问题(八数码)求解过程动态演示

C语言教程 C语言函数
九宫问题(八数码)求解过程动态演示

模拟退火算法求解TSP问题

C语言教程 C语言函数
模拟退火算法求解TSP问题

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

java N皇后实现问题解析

编程语言 网络编程
java N皇后实现问题解析

十二星座: 求解塔罗牌问题六芒星牌阵

十二星座 星座
十二星座: 求解塔罗牌问题六芒星牌阵

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Apache2的httpd.conf翻译

Apache2的httpd.conf翻译

Win10系统如何去除图标小箭头

Win10系统如何去除图标小箭头
下拉加载更多内容 ↓