关于八皇后的问题
#include <stdio.h>void putQueen(int,int,int);
void printSolution(void);
int a[8][8]={0},n=1;
main()
{
putQueen(-1,0,0);
return 0;
}
void putQueen(int i,int j,int m)
{
int ix,jx,chi,chj,ok;
if(m!=-1)
{
if(m==0&&j==8)
putQueen(0,0,-1);
else
{
if(m==0)
{
a[i+1][j]=1;
putQueen(i+1,0,m+1);
}
else
{
if(m==8)
{
printSolution();
n++;
for(chi=i,chj=0;a[chi][chj]==0;chj++)
{}
a[chi][chj]=0;
putQueen(i-1,chj+1,m-1);
}
else
{
if(j<=7)
{
for(ix=i+1,jx=j;jx<=7;jx++)
{
for(ok=0,chi=0,chj=-7;chj<=7;chj++)
if(ix+chi<=7&&ix+chi>=0&&jx+chj<=7&&jx+chj>=0)
if(a[ix+chi][jx+chj])
ok++;
for(chi=-7,chj=0;chi<=7;chi++)
if(ix+chi<=7&&ix+chi>=0&&jx+chj<=7&&jx+chj>=0)
if(a[ix+chi][jx+chj])
ok++;
for(chi=-7,chj=-7;chi<=7&&chj<=7;chi++,chj++)
if(ix+chi<=7&&ix+chi>=0&&jx+chj<=7&&jx+chj>=0)
if(a[ix+chi][jx+chj])
ok++;
for(chi=-7,chj=7;chi<=7&&chj>=-7;chi++,chj--)
if(ix+chi<=7&&ix+chi>=0&&jx+chj<=7&&jx+chj>=0)
if(a[ix+chi][jx+chj])
ok++;
if(!ok)
{
a[ix][jx]=1;
putQueen(ix,0,m+1);
}
}
}
else
{
ok=1;
}
if(ok)
{
for(chi=i,chj=0;a[chi][chj]==0;chj++)
{}
a[chi][chj]=0;
putQueen(i-1,chj+1,m-1);
}
}
}
}
}
}
void printSolution()
{
int i,j;
printf("Case %d:\n",n);
for(i=0;i<=7;i++)
{
for(j=0;j<=7;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
RT
函数putQueen(上一次放棋的行数0开始,这次开始筛选的列数,放旗子的个数)
本来两个形参就可以,不想改了
可以输出前92个,却无法停止直至出错
93个以后 第一行全为0
求大大改进