八皇后的题目

来源:互联网 发布:erp软件销售 编辑:程序博客网 时间:2024/04/30 12:46

在一个8*8的棋盘上放置8个皇后,使得两两不在一条横or竖or斜线上。你可以想象使第一个棋子占据第一行棋盘的第一个位置(1,1),然后将第二个棋子置于第二行棋盘的满足皇后间条件的位置,比如(2,3),依次逐行两两判断。遇到没有位置可放的情况自然要将前面一行的棋子位置继续移动一个,也就是要回溯,其余的细节你可以参考一下相关书籍,可以递归当然也可以用非递归实现。希望我说得还算清晰哦:)  
---------------------------------------------------------------  
 
最好使用栈来解决这个问题:  
     1,先建立一个栈,然后就是像楼上说的那样,先把第一个棋子放入第一行,第一列(1,1),把它存入栈底。  
     2,遍历找第二个棋子的位置,将第二个棋子置于第二行棋盘的满足条件的位置,比如(2,3),再存入栈顶。  
     3,寻找第三个棋子得位置,  
     4,…………  
     5,在遍历完寻找不到该棋子得位置时,就是上一个棋子放的位置不对。将上一个棋子出栈,再遍历寻找上一个棋子的其他位置,  
     6,如果还找不到就是上一个的上一个的棋子的位置不对,再继续出栈,  遍历寻找其位置,  
     7,……  
     其实就是一个递归,回朔的问题,只是在递归,回溯的过程中,使用栈来存放所找到棋子的位置。