这是五个经典的c语言源程序

源代码在线查看: 八皇后问题的递归算法.txt

软件大小: 10 K
上传用户: boobyb
关键词: c语言 源程序
下载地址: 免注册下载 普通下载 VIP

相关代码

				 
				 
				八皇后问题的递归求解  
				 
				
				 #include 
				#include 
				#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				   for(j=0;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				  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				  for(j=0;j				   map[i][j]=0;
				 for(i=0;i				
				 fprintf(fp,"\n start..............");
				 if(!try(0))printf("\n no resolution!");
				 fprintf(fp,"\n num=%d",num);
				
				}
				 
				 
							

相关资源