|
[code:1]
/*代码无缩进,抱歉!!*/
/*我的困惑在程序里表明的,请告知,谢谢!!*/
#include <stdio.h>
#include <stdlib.h>
#define MAXN 20
int n,m,good;
int col[MAXN+1],a[MAXN+1]; /*col[m]=n 表示M列COL[M]行有皇后,a[k]=0表示K行有皇后*/
int b[2*MAXN+1],c[2*MAXN+1];
void main(void)
{
int j,n;
/ *n表示棋盘的格数*/
输入n的值;
for(j=0;j<=n;j++) a[j]=1; /*a[k]=1 表示K行有皇后*/
for(j=0;j<=2*n;j++)
b[j]=c[j]=1;
m=1;col[1]=1;good=1;col[0]=0;
do
{
if(good)
if(m==n){ /*已完成一次布棋*/
输出棋盘;
/*调整,以得到下个解*/
/*============小弟就是这里不明白==================*/
while(col[m]==n)
{
m--; /*调整M-1 列,M列怎摸办,为什么不调整???*/
a[col[m]=b[m+col[m]]=c[n+m-col[m]]=1;
}
col[m]++; /*调整最后一个可调整皇后*/
}
/*============小弟修改如下,以表示差别============*/
while(col[m]==n)
{
a[col[m]=b[m+col[m]]=c[n+m-col[m]]=1;
m--;
}
a[col[m]=b[m+col[m]]=c[n+m-col[m]]=1;
col[m]++; /*调整最后一个可调整皇后*/
}
/*=================================================*/
else { /*皇后并未全部就席*/
a[col[m]=b[m+col[m]]=c[n+m-col[m]]=0;
col[m++]=1; /*下一列,从第一行开始测*/
}
else {/*当前棋盘有冲突*/
/*======困惑如前!!======*/
while(col[m]==n)
{
m--; /*调整M-1 列,M列怎摸办,为什么不调整???*/
a[col[m]=b[m+col[m]]=c[n+m-col[m]]=1;
}
col[m]++; /*调整最后一个可调整皇后*/
}
good=a[col[m]] && b[m+col[m]]&& c[n+m-col[m]];
}while(m!=0);
}
[/code:1][/code] |
|