经典八皇后问题

经典八皇后问题。

#include<stdio.h>
#define N 8
int number=0;
int chess[N][N];
void printArray();
int check(int i,int j,int chess[][8]);
int  check(int i,int j,int chess[][8])
{int k,b,g;	 b=i-j;   g=j+i; 
for(k=0;k<N;k++)
  {
  if(chess[i][k]==1) return 0;
  }
  for(k=0;k<N;k++)
  {
  	if(chess[k][j]==1) return 0;
  }
/*  
   for(int q=0;q<N,q-b<N;q++)
   {if(chess[q][q-b]==1)
    return 0;}

  for(int a=0;a<N,g+a<N;a++)
   {if(chess[a][g+a]==1)
    return 0;}
   
  	return 1;
  }*/
	for(k=-N;k<=N;k++)

	{
		if((i+k>=0)&&(i+k<N)&&(j+k<N)&&(j+k>=0))
	    {
		if(chess[i+k][j+k]==1) return 0;
	    }
	    if((i-k>=0)&&(i-k<N)&&(j+k>=0)&&(j+k<N))
	    {
	    	if(chess[i-k][j+k]==1) return 0;
		}
	}
	return 1;
}
int trial(int i)
{    if(i>N-1) 
   {
	      printArray(); 
	      
	      return 1;
   }   
   for(int j=0;j<N;j++)
   {
   	if((check(i,j,chess))==1)
   	{     chess[i][j]=1;//放置 元素在i行j列; 
	      trial(i+1); 
	      chess[i][j]=0;//拿走元素;
	   }
   	}
}

  void printArray()
{    printf("第%d种解法\n",++number);

	for(int i=0;i<N;i++)
	{
	for(int j=0;j<N;j++)
	{
	printf("%3d",chess[i][j]);
	}
	printf("\n");
}
printf("\n");
}
int main()
{
	
	for(int i=0;i<N;i++)
	for(int j=0;j<N;j++)
	{
	chess[i][j]=0;
	}
	trial(0);
 }
  

利用递归回溯方法来解决问题

猜你喜欢

转载自blog.csdn.net/weixin_43752167/article/details/85266049