八个皇后 java,c实现

上传人:wm****3 文档编号:42907604 上传时间:2018-06-04 格式:DOC 页数:6 大小:76KB
返回 下载 相关 举报
八个皇后 java,c实现_第1页
第1页 / 共6页
八个皇后 java,c实现_第2页
第2页 / 共6页
八个皇后 java,c实现_第3页
第3页 / 共6页
八个皇后 java,c实现_第4页
第4页 / 共6页
八个皇后 java,c实现_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《八个皇后 java,c实现》由会员分享,可在线阅读,更多相关《八个皇后 java,c实现(6页珍藏版)》请在金锄头文库上搜索。

1、From GossipcaterpillarAlgorithm Gossip: 八個皇后八個皇后說明說明西洋棋中的皇后可以直線前進,吃掉遇到的所有棋子,如果棋盤上有八個皇后,則這八個皇后如何相安無事的放置在棋盤上,1970 年與 1971 年, E.W.Dijkstra 與 N.Wirth 曾經用這個問題來講解程式設計之技巧。解法解法關於棋盤的問題,都可以用遞迴求解,然而如何減少遞迴的次數?在八個皇后的問題中,不必要所有的格子都檢查過,例如若某列檢查過,該該列的其它格子就不用再檢查了,這個方法稱為分支修剪。 所以檢查時,先判斷是否在已放置皇后的可行進方向上,如果沒有再行放置下一個皇后,如此就可

2、大大減少遞迴的次數,例如以下為修剪過後的遞迴檢查行進路徑:八個皇后的話,會有 92 個解答,如果考慮棋盤的旋轉,則旋轉後扣去對稱的,會有 12 組基本解。 實作實作C #include #include #define N 8 int columnN+1; / 同欄是否有皇后,1 表示有 int rup2*N+1; / 右上至左下是否有皇后 int lup2*N+1; / 左上至右下是否有皇后 int queenN+1 = 0; int num; / 解答編號 void backtrack(int); / 遞迴求解 int main(void) int i; num = 0; for(i =

3、1; i N) showAnswer(); else for(j = 1; j 8) showAnswer(); else for(int j = 1; j = 8; j+) if(columnj = 1 / 設定為佔用columnj = rupi+j = lupi-j+8 = 0; backtrack(i+1); columnj = rupi+j = lupi-j+8 = 1; protected void showAnswer() num+;System.out.println(“n 解答 “ + num);for(int y = 1; y = 8; y+) for(int x = 1; x = 8; x+) if(queeny = x) System.out.print(“ Q“);else System.out.print(“ .“);System.out.println();public static void main(String args) Queen queen = new Queen();queen.backtrack(1);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号