还剩5页未读,继续阅读
文本内容:
程序员递归面试问题及解析程序员递归面试问题及解析面试例题2八皇后问题是一个古老而著名的问题,是回溯算法的典型例题该问题是19世纪著名的数学家高斯1850年提出在8×8格的.国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法[英国某著名计算机图形图像公司面试题]解析递归实现n皇后问题算法分析数组a、b、c分别用来标记冲突,a数组代表列冲突,从a
[0]~a
[7]代表第0列到第7列如果某列上已经有皇后,则为1,否则为0数组b代表主对角线冲突,为b[i-j+7],即从b
[0]~b
[14]如果某条主对角线上已经有皇后,则为1,否则为0数组c代表从对角线冲突,为c[i+j],即从c
[0]~c
[14]如果某条从对角线上已经有皇后,则为1,否则为0代码如下#includestaticcharQueen
[8]
[8];staticinta
[8];staticintb
[15];staticintc
[15];staticintiQueenNum=0;//记录总的棋盘状态数voidquinti;//参数i代表行intmain{intiLineiColumn;//棋盘初始化,空格为*,放置皇后的地方为@foriLine=0;iLine8;iLine++{a[iLine]=0;//列标记初始化,表示无列冲突foriColumn=0;iColumn8;iColumn++Queen[iLine][iColumn]=*;}//主、从对角线标记初始化,表示没有冲突foriLine=0;iLine15;iLine++b[iLine]=c[iLine]=0;qu0;return0;}voidquinti{intiColumn;foriColumn=0;iColumn8;iColumn++{ifa[iColumn]==0b[i-iColumn+7]==0c[i+iColumn]==0//如果无冲突{Queen[i][iColumn]=@;//放皇后a[iColumn]=
1...。