8皇后问题
8皇后问题是在一个8X8的棋盘上如何摆放8个国际象棋中的后,国际象棋中,后可以走直线和斜线,因此这个程序的关键就是让8个皇后既不在同一行,也不在同一个直线上。
今天晚上,终于在我的屏幕上出现了8皇后的92种解法,心里挺高兴的。其实昨天就应该运行成功的,可就是因为一个小小的错误,让我昨天一个上午都没有让它运行成功。这种情况发生很多次了,往往就是因为那么一点点不经意的失误,足以让很多东西前功尽弃。这次主要是向上一行推时忘记把行数向前推进一位。昨天还有一个主要的错误是错误的使用了迭代,出现了无穷迭代,以至于VS2008一直报告STACK FLOWOVER。今天改了下代码,晚上又完善了一下,已经成功了。这个程序没有借鉴任何思路,完全出于自己的手,因此很有成就感,下面是思路。
思路如下:
1,将第一个皇后摆在第一行的第一个位置上。
2,再摆下一个皇后,下一个皇后从下一行的第一个位置开始尝试,若找到不与前面的冲突的位置,则放下,并记录该位置,然后寻找下一个皇后的位置。
3,当摆到某一个皇后从第一个位置到最后一个位置都冲突,则重新摆放上一行的皇后,是上一行的皇后从当前位置向后移动,重复2步骤,若仍然有冲突则重复3。
4,行数加到第9行时,证明前面的皇后都已经找到位置,此时第一种解法出现。
5,在第一种解法的基础上,不断移动最后一行的棋子,迫使前面的棋子重新找位置,直到第一行的棋子找不到位置(移动到第九排)时,所有解法都已经出现。
下边是代码