首页 > 代码库 > 八皇后的问题

八皇后的问题

                    八皇后的问题和马踏棋盘的思路是一样,都用到了回溯的思想。代码也都差不多。这个里面最精彩的地方用4个一位数组表示了这个棋盘。这个里面总共有92组解

            代码展示

                      

#include<stdio.h>
#include<stdlib.h>
int col[8]={0};
int right[15]={0};
int left[15]={0};
int Queen[8];
int cnt;   //全局变量

void print();
void insertQueen(int );


void  insertQueen(int i)
{
   for(int j=0;j<8;j++)
   {
       if(col[j]==0&&right[i+j]==0&&left[i-j+7]==0)  //判断是否可以放
	   {
		   Queen[i]=j;   //放皇后
		   col[j]=1;
		   right[i+j]=1;
		   left[i-j+7]=1;
		   if(i<7)
		      insertQueen(i+1);   //递归
		    else
			{
				print();
			}
	   col[j]=0;      //清除标记,查找下一组的解
       right[i+j]=0;
	   left[i-j+7]=0;
	   }
   }
}
void print()
{
	int i,j;
	printf("输出第%d组解\n",++cnt);
	for(i=0;i<8;i++)
	{
		for(j=0;j<8;j++)
		{
            if(Queen[i]==j)
				printf("■");
			else
				printf("□");
		}
		printf("\n");
	}
}
int main()
{  
   insertQueen(0);
	return 0;
}
技术分享

八皇后的问题