運用c#wpf程式設計實現了經典的回溯演算法解決「八皇后問題」
程式執行演示結果如下:
演算法核心**:
namespace nqueen
/// /// 根據皇后數目繪製棋盤函式(暫不使用)
///
/// 皇后數目
public void drawqueen()
}/// /// 初始化演算法資料
///
///
public void inital(int number)
isenableleft = new boolean[number * 2 - 1];
for (int i = 0; i < number * 2 - 1; i++)
isenableright = new boolean[number * 2 - 1];
for (int i = 0; i < number * 2 - 1; i++)
queennumber = number;
}/// /// 設定皇后的位置,如果此皇后已經存在則改變皇后的位置
///
/// 表示第幾個皇后
/// 表示皇后所在的行數
/// 表示皇后所在的列數
public void setqueen(int row,int column)
else
queens[row].name = "queen" + row.tostring();
gridmain.children.add(queens[row]);
gridmain.registername("queen" + row.tostring(), queens[row]);
grid.setrow(queens[row], row);
grid.setcolumn(queens[row], column);
}//public void deletequeen(int queenseq);
/// /// 開始運算按鈕事件
///
///
///
private void button2_click(object sender, routedeventargs e)
/// /// 初始化按鈕事件
///
///
///
private void startbutton_click(object sender, routedeventargs e)
// messagebox.show(output);
}/// /// 放置皇后
///
/// 放置第n行的皇后
public bool putqueen(int row)
for (int col = 0; col < queennumber; col++)
}return false;}}
}
前台**
回溯演算法 八皇后
總時間限制 1000ms 記憶體限制 65536kb 描述 會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b 1b2....
回溯演算法 八皇后
今天學習了下回溯演算法,順便看了下經典案例 八皇后問題。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。回溯演算法的搜尋邏輯是深度優先,即,從一條路往前走,能進則進,不能進則...
八皇后演算法(回溯)
演算法描述 八皇后是一道很具典型性的題目。它的基本要求是這樣的 在乙個8 8的矩陣上面放置8個物體,乙個矩陣點只允許放置乙個物體,任意兩個點不能在一行上,也不能在一列上,不能在一條左斜線上,當然也不能在一條右斜線上。八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數...