QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 542|回复: 0

皇后问题????

[复制链接]
发表于 2004-9-8 17:54:14 | 显示全部楼层 |阅读模式
[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]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 13:31 , Processed in 0.036392 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表