⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 八皇后问题的递归算法.txt

📁 这是五个经典的c语言源程序
💻 TXT
字号:
 
 
八皇后问题的递归求解  
 

 #include <stdio.h>
#include <stdlib.h>
#define N 8        /* 棋盘边长  */
#define XXN     15 /* 正(反)对角线个数 */
#define TRUE 1
#define FALSE 0 
int map[N][N];/* 棋盘     */ 
int col[N];   /* 列       */
int XX[XXN];  /* 正对角线 */
int YY[XXN];  /* 反对角线 */
FILE* fp;
int num=0;  /* 解的个数 */

/**
显示一个解
*/
void showMap()
{

 int i,j;
 fprintf(fp,"\n--------------------------\n");
 for(i=0;i<N;i++){
   for(j=0;j<N;j++)
    fprintf(fp,"%-3d",map[i][j]);
   fprintf(fp,"\n");
  }
}

/**
递归求解函数
*/
int  try(int y)
{
 int i,j;
 int success=FALSE;
 if( y==N){  /* 求出一个解*/
  showMap();
  num++;
  return TRUE;
 }
 for(i=0;i<N;i++){
  if(XX[N-y+i]==0 && YY[i+y]==0 && col[i]==0) /* 保证布局要求; 对角线,列,没有重复放置棋子 */
  { 

   XX[N-y+i]=YY[i+y]=col[i]=map[y][i]=1; 
   if(try(y+1)) success=TRUE;              /* 放下一个皇后  */   
   XX[N-y+i]=YY[i+y]=col[i]=map[y][i]=0;
  }

 }
 return success;


}


main()
{
 int i,j,result;

 fp=fopen("queen8.txt","w+");
 for(i=0;i<N;i++)
  for(j=0;j<N;j++)
   map[i][j]=0;
 for(i=0;i<XXN;i++) XX[i]=YY[i]=0;

 fprintf(fp,"\n start..............");
 if(!try(0))printf("\n no resolution!");
 fprintf(fp,"\n num=%d",num);

}
 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -