一、問題描述
八皇后問題是乙個以西洋棋為背景的問題:如何能夠在 8×8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。
二、整體設計思路
1.用web控制項table實現棋盤的布局
table控制項在後台用**生成,多個單元格tablecell構成一行tablerow,而多個行構成乙個**table。
採用的語句有
(1)tablerow.cells.add(tablecell) 單元格插入到行
(2)table.rows.add(tablerow) 行插入到**
(3)holder.controls.add(tabel) **插入到容器
行列之和為奇數時候單元格背景為黑色,對應css設計td.black,否則為白色,對應css設計td.black;
2、皇后放置,將單元格的背景換成80*80的
皇后的,對應css設計td.queen
3、asp.net頁面設計,乙個html標題控制項,左右兩個div層,#div_left ,#div_right ,左邊放置計算按鈕、顯示排列結果的listbox和排列總個數的lable控制項,右邊是乙個placeholder控制項,用來放置生成的table控制項
4.八皇后問題的遞迴演算法求解,就得的結果放置在lisitem中,再將listitem放入listbox中
5.將最終的排列的總個數在label控制項中顯示
三、**
1.前台介面設計
2.後台**
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.ui;
using system.web.ui.webcontrols;
public partial class queen : system.web.ui.page
//x存放放置位置,cout存放放置方法的總個數
int x = new int[8];
int cout = 0;
public void queen(int t)
lbo_res.items.add(li);
}else }}
}//檢查皇后放置是否合法
public bool issafe(int r)
}return true;
}protected void button1_click(object sender, eventargs e)
protected void lbo_res_selectedindexchanged(object sender, eventargs e)
if (c.tostring() == arrry[r].tostring())
_row.cells.add(_cell);
}_tbl.rows.add(_row);
}holder_table.controls.add(_tbl);}}
四、效果展示
八皇后問題(用c語言實現)
八皇后問題 輸入 乙個數字n,表示在n n的 上,合理的擺放n個皇后。輸出 輸出n個皇后所能擺放的全部可能性,0 該位置不擺放皇后,1 在該位置擺放皇后。樣例輸入 1 no answer 2 no answer 4 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 1 0 1 ...
八皇后問題演算法(C語言實現)
八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有76種方案。1854年在柏林的象棋雜誌上不同的作者發表了...
回溯法(八皇后問題)及C語言實現
回溯法,又被稱為 試探法 解決問題時,每進行一步,都是抱著試試看的態度,如果發現當前選擇並不是最好的,或者這麼走下去肯定達不到目標,立刻做回退操作重新選擇。這種走不通就回退再走的方法就是回溯法。很多人認為回溯和遞迴是一樣的,其實不然。在回溯法中可以看到有遞迴的身影,但是兩者是有區別的。回溯法從問題本...