凤凰新媒体 版权所有 不得转载 lawyer@ifeng.com
京ICP证030609号 本站通用网址:凤凰网
客服电话:(010)84458487 客服邮箱blog@ifeng.com
刚才写的不小心全给delete,
,又得重新。就简原则。
void test(int i)
{
if( i <= N)
{
for(j = 1; j <= N; j++)
{
if(OK(i,j))
{
H[i] = j;
text(i+1);
}
else
{
}
}
}
else
{
printf("第%d组解为",count);
for(i = 1; i <= N; i++)
{
printf("%d",H[i]);
}
}
}
int OK(int i, int j)//看第i行的j列是否可以插入
{
for( k = 1; k < i; i++)
if((j = H[k]) || (k - H[k] = i - j) || ( k+H[k] = i + j))
{
return 0;
}
else
{
return 1;
}
}
i 表示行号
H[i] 表示第i行可以插入皇后的“纵坐标”
N 表示n皇后
关键部分
if((j = H[k]) || (k - H[k] = i - j) || ( k+H[k] = i + j))
判断第j列 能否不加如 需要看看它的四周有没有皇后
H[K]该列的overhead
k - H[k] 与 k + H[k] 它的斜对角线
如果都不冲突 OK 加入 否则PASS next one
请登录以后再发表评论。