用C 語言實現八皇后問題

2021-07-14 15:52:50 字數 1752 閱讀 1980

一、問題描述

八皇后問題是乙個以西洋棋為背景的問題:如何能夠在 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語言實現

回溯法,又被稱為 試探法 解決問題時,每進行一步,都是抱著試試看的態度,如果發現當前選擇並不是最好的,或者這麼走下去肯定達不到目標,立刻做回退操作重新選擇。這種走不通就回退再走的方法就是回溯法。很多人認為回溯和遞迴是一樣的,其實不然。在回溯法中可以看到有遞迴的身影,但是兩者是有區別的。回溯法從問題本...