程序代码:
#include <stdio.h>
#include <stdlib.h>
//9皇后问题简化,若在a[0][0]放一个棋子,则其他的棋子的方法。
static int a[8][8]={0};
void find_number_1(int i,int j)/* 找出在第i行第j列元素放入棋子后,不能存放元素的行和列的下标,1表示占领,0表示可用; */
{
int m,n,o,k;/* m列数,n行数 */
o=i+j;
k=i-j;
for (m=0;m<9;m++)
{
a[i][m]=1;
// printf("a[%d][%d]=1",i,m);
}
for (n=0;n<9 ;n++ )
{
a[n][j]=1;
// printf("a[%d][%d]=1",n,j);
}
for (i=0;i>=0&&i<9 ;i++ )
{
for (j=0;j>=0&&j<9;j++)
{
if (o==j+i)
a[i][j]=1;
// printf("a[%d][%d]=1",i,j);
}
}
for (i=0;i>=0&&i<9 ;i++ )
{
for (j=0;j>=0&&j<9 ;j++ )
{
if (k>0&&k==(i-j))
a[i][j]=1;
// printf("a[%d][%d]=1",i,j);}
else if (k<=0&&k==j-i)
a[i][j]=1;
// printf("a[%d][%d]=1",j,i);
}
}
}
void tyr()//从a[0][0]开始放棋子的放法,1代表格子不能放,0代表能放
{
int i,j;
for (i=0;i<9;i++ )
{
for (j=0;j<9;j++ )
{
if(a[i][j]==1)
{
printf("a[%d][%d]=%d ",i,j,a[i][j]);}
else if(a[i][j]==0)
{
find_number_1(i,j);
a[i][j]=0;
printf("a[%d][%d]=%d ",i,j,a[i][j]);
}
}
}
}
int main(int argc, char *argv[])
{
tyr();
return 0;
}
刚才那个问题继续,第一个棋子房子a[0][0]上,得出的结果不对。哪位高手能指教下?不甚感激~~!