主题:[讨论]按吴伟明数据结构书上的方法编了一个求八皇后问题的算法?可不知错在何处,帮帮忙!!
#include "stdio.h"
#include "stdlib.h"
#define N 8
int array[N][N]; //棋盘
int legal(int row,int col)
{
int i,j;
//同行是否合法;
for(i=0;i<=col-1;i++)
{
if(array[row][i]==1)return 0;
}
for(i=col+1;i<N;i++)
{
if(array[row][i]==1)return 0;
}
//同列是否合法;
for(i=0;i<=row-1;i++)
{
if(array[i][col]==1)return 0;
}
for(i=row+1;i<N;i++)
{
if(array[i][col]==1)return 0;
}
//对角线是否合法;
i=row-1;
j=col+1;
while(i>=0 && j<= N-1)
{
if(array[i][j]==1)return 0;
--i;++j;
}
i=row+1;
j=col-1;
while((i<=N-1)&&j>=0)
{
if(array[i][j]==1)return 0;
++i;--j;
}
i=row-1;j=col-1;
while(i>=0&&j>=0)
{
if(array[i][j]==1)return 0;
--i;--j;
}
i=row+1;j=col+1;
while((i<=N-1)&&j<=N-1)
{
if(array[i][j]==1)return 0;
++i;++j;
}
return 1;
}
void display()
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
printf("%d ",array[i][j]);
}
printf("\n");
}
}
void Trial(int i)
{
int j ;
if(i>=N)display();
else
{
for(j=0;j<=N-1;j++)
{
array[i][j] = 1;
if(legal(i,j)==1) Trial(i+1);
else array[i][j] = 0;
}
}
}
int main()
{
//初始化数组;
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
array[i][j]=0;
}
}
display();
printf("\n");
Trial(0);
return 0;
}
#include "stdlib.h"
#define N 8
int array[N][N]; //棋盘
int legal(int row,int col)
{
int i,j;
//同行是否合法;
for(i=0;i<=col-1;i++)
{
if(array[row][i]==1)return 0;
}
for(i=col+1;i<N;i++)
{
if(array[row][i]==1)return 0;
}
//同列是否合法;
for(i=0;i<=row-1;i++)
{
if(array[i][col]==1)return 0;
}
for(i=row+1;i<N;i++)
{
if(array[i][col]==1)return 0;
}
//对角线是否合法;
i=row-1;
j=col+1;
while(i>=0 && j<= N-1)
{
if(array[i][j]==1)return 0;
--i;++j;
}
i=row+1;
j=col-1;
while((i<=N-1)&&j>=0)
{
if(array[i][j]==1)return 0;
++i;--j;
}
i=row-1;j=col-1;
while(i>=0&&j>=0)
{
if(array[i][j]==1)return 0;
--i;--j;
}
i=row+1;j=col+1;
while((i<=N-1)&&j<=N-1)
{
if(array[i][j]==1)return 0;
++i;++j;
}
return 1;
}
void display()
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
printf("%d ",array[i][j]);
}
printf("\n");
}
}
void Trial(int i)
{
int j ;
if(i>=N)display();
else
{
for(j=0;j<=N-1;j++)
{
array[i][j] = 1;
if(legal(i,j)==1) Trial(i+1);
else array[i][j] = 0;
}
}
}
int main()
{
//初始化数组;
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
array[i][j]=0;
}
}
display();
printf("\n");
Trial(0);
return 0;
}