8个皇后"转到"命令烦我

时间:2015-10-29 22:25:29

标签: c

好的,所以我为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只是让我的头受伤:)

2 个答案:

答案 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)

Oh, I actually found the problem. The number of the queens ( value a ) didn't reset after the if ( a!= 8 ) switch so a would just keep increasing and never hitting 8. So, I just added a=0 in the if ( a != 8 ) switch , so it resets the value a every time the code doesn't get the right combination, THEN it returns to the beginning. Now it does calculate one of the possible combinations. :) Gonna fix it up a little bit so it looks and works nicer though.