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

📄 8queen3555.cpp

📁 八皇后问题的c语言实现
💻 CPP
字号:
//1.八皇后问题
//改进后的8queue解法;
//用1表示改位置空闲放棋子,0则表示有冲突;
//采用分屏显示更利于结果的查看;
#include <stdio.h>
   int pos[8],									// 棋子位置
	   heng[8]={1,1,1,1,1,1,1,1},					// 横线是否可用
	   posx[15]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},	// 右斜线(\)是否可用
	   negx[15]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},	// 左斜线(/)是否可用
	   count=0,									// 解法的计数器
	   i=-1;										// 初始列数
   void display(int i)								// 显示结果子程序	
   {
	   printf("rezult#%3d: ",i);
	   for(int j=0;j<8;j++)  printf("%2d",pos[j]+1);
	   printf("\n");
	   if(i % 20==0)								// 分屏控制
		                                            //每次至多显示20位
	   {
		 printf("Press <Enter> to continu...");
		 while (getchar()!='\n') {};
	   }
   }
   void setpos(int j)								// 被占用的(/)释放 线子程序
   {
	   heng[j]=!heng[j];
	   posx[i+j]=!posx[i+j];
	   negx[i-j+7]=!negx[i-j+7];
   }
   void main()									
   {	
	   i++;										// 下一列
	   for(int j=0;j<8;j++)						// 遍历8个位置
	   {
		 if(heng[j] && posx[i+j] && negx[i-j+7]) // 从该点引出的横线,
		                                    	 //左斜线,右斜线,位置可用?
		 {
			pos[i]=j;							// 占用位置占用
			setpos(j);					
			if(i==7) display(++count);			// 判断结束时输出
			main();							// 下一皇后
			setpos(j);							// 位置释放
		 }
	   }
	   i--;										// 上一列
   }
    

⌨️ 快捷键说明

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