经典八皇后问题。
#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);
}
利用递归回溯方法来解决问题