好的,所以我为8皇后问题做了一个非常奇怪的代码。别问我怎么做到这一点。当我为第一个皇后设置好位置时,代码成功计算了8个皇后的位置(它为mat [k] [l]计算得很好,其中k为5且l为0起始位置) 。在那之后,我试图找到一个程序的修复程序,这样它就能够计算出没有良好起始位置的所有位置。因此,我们的想法是计算整个代码之后的任务数量,如果不是8,请使用goto命令将代码返回到开头。在此之前,我当然将第一个坐标增加了一个。所以我的想法是:从起始位置0开始。如果在代码完成后字段上设置的皇后数不是8,那么增加k,返回到开头,然后尝试启动垫的位置[1] [0]。依此类推,直到找到正确的起始位置。但是,当我运行代码时(在"改进"之后),它只会崩溃并且什么都不做。当我在开始时将k设置为5时,因此它从mat [5] [0]开始,结果计算得很好。我想问题是goto命令,我只是不知道如何修复它因为我认为代码的想法是好的。我无法解决的一些技术问题。这是代码。
B3:E7
我知道有很多奇怪的事情发生了。首先,我将所有位置设置为0,然后将一个位置设为1(这是一个女王)。然后标记其他女王不能被放置的所有位置2.然后我用其他女王和其他2-s填补空白。然后只需将2-s打印为零,将1-s打印为1-s。还有很多奇怪的其他东西。 :)重点是找到位置的代码效果很好,goto只是让我的头受伤:)
答案 0 :(得分:1)
声明:
goto label1;
相当于:
continue;
并将继续循环while( n < 64 )
声明:
goto label2;
正确使用goto
:它是打破嵌套循环而不引入破坏代码的布尔变量的唯一方法。
声明:
goto label3;
可以在label3
的循环中替换,直到if ( a!= 8 )
(删除if):
for (k=0; a!=8; k++) {
在用结构化代码替换gotos后,您可能更好地了解修复算法的步骤(我没有考虑过)。
答案 1 :(得分:0)