返回信息流在C语言书上看见一个八皇后问题,试了半天,发现在点费解,求达人解决。
一个国际象棋的棋盘上,能否放八个皇后,让她们互不侵犯。可以建立一个a[8][8]的数组,给每个方块先赋0,放上皇后后,就会有一个方块不能再放了,将其赋另一个值,最后得出如何在棋盘上放八个皇后。
这是一条镜像帖。来源:北邮人论坛 / cpp / #45294同步于 2010/10/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求助,C语言八皇后问题
laoboss
2010/10/26镜像同步18 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我很多年前发过一个。。。用了一个 goto 。。。结果被版上一群书呆子 bs 了好久。。。
【 在 laoboss 的大作中提到: 】
: 在C语言书上看见一个八皇后问题,试了半天,发现在点费解,求达人解决。
: 一个国际象棋的棋盘上,能否放八个皇后,让她们互不侵犯。可以建立一个a[8][8]的数组,给每个方块先赋0,放上皇后后,就会有一个方块不能再放了,将其赋另一个值,最后得出如何在棋盘上放八个皇后。
很多年前。。。还没有这个版。。。
【 在 ki (谁) 的大作中提到: 】
: 我很多年前发过一个。。。用了一个 goto 。。。结果被版上一群书呆子 bs 了好久。。。
我想的是弄个栈……
一个一个放放到不行的地方出栈回上一层改位置
【 在 laoboss (独醒人) 的大作中提到: 】
: 在C语言书上看见一个八皇后问题,试了半天,发现在点费解,求达人解决。
: 一个国际象棋的棋盘上,能否放八个皇后,让她们互不侵犯。可以建立一个a[8][8]的数组,给每个方块先赋0,放上皇后后,就会有一个方块不能再放了,将其赋另一个值,最后得出如何在棋盘上放八个皇后。
晕,这难道不是经典的回溯算法么?这种东西初二的时候就会做了......
【 在 renne 的大作中提到: 】
: 我想的是弄个栈……
: 一个一个放放到不行的地方出栈回上一层改位置
只有程序了,源码找不到了。。
【 在 laoboss 的大作中提到: 】
: 在C语言书上看见一个八皇后问题,试了半天,发现在点费解,求达人解决。
: 一个国际象棋的棋盘上,能否放八个皇后,让她们互不侵犯。可以建立一个a[8][8]的数组,给每个方块先赋0,放上皇后后,就会有一个方块不能再放了,将其赋另一个值,最后得出如何在棋盘上放八个皇后。
: --
: ...................
附件(55.5KB) Eight_queen.exe
读Unix网络编程,Stevens就写了不少goto,代码简直太明晰了
运用之妙,存乎一心
我好菜的,换我,我就不敢随意用=。=尽量少用goto的说法还是有道理的,需要积累才能驾驭呀
【 在 ki 的大作中提到: 】
:
: 我很多年前发过一个。。。用了一个 goto 。。。结果被版上一群书呆子 bs 了好久。。。
: 【 在 laoboss 的大作中提到: 】
: ...................
#include <stdio.h>
#include <sys/types.h>
ulong search(ulong lb, ulong cb, ulong rb, ulong cnt) {
ulong bs;
if (~0ul == cb)
cnt ++;
else
for (bs = lb | cb | rb; ~0ul != bs;) {
ulong b = ~bs & (bs+1);
bs |= b;
cnt = search((lb | b) << 1, cb | b, (rb | b) >> 1, cnt);
}
return cnt;
}
void main() {
printf("%li\n", search(0, ~0ul >> 8, 0,0));
}
Sigh……我初学编程的时候是用BASIC……最basic那种,连函数、子程序、if then else都不支持……如果不能够用goto就悲剧了……