下面這個演算法實現了列出所有可能放置的情況。
using
system;
namespace
queen
// 顯示當前矩陣情況。
public
void display()
console.writeline();
} }
// 判斷當前位置是否可以放置皇后。
private
bool iscurrentcanplaced(int row,int col )
for(i = row-1,j=col -1; i>=0 && j>=0 ;i--,j--)
for(i = row-1,j=col +1; i>=0 && j
return
true;
}
//
將當前行的所有位置都置為可以放置
private
void resetrow(int row)
//
查詢所有放置的可能。
public
void solve(int row)
}
return ;
}
for(int col = 0;col
}
}
public
static
void
main
()
}
}
執行結果如下:
**********1************
0 1 0 0
0 0 0 1
1 0 0 0
0 0 1 0
**********2************
0 0 1 0
1 0 0 0
0 0 0 1
0 1 0 0
求解n皇后問題
n皇后問題 回溯法 遞迴的邏輯中一般有兩個重要的概念 1.遞迴邊界 2.遞迴式 1.問題描述 在n n格的國際象棋上擺放n個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。遞迴思想 int count 0 void generatep int index ...
n皇后問題求解
在一個n n的棋盤上放置n個王后,使得每個王后不會相互攻擊,即任意兩個王后不在同一行 同一列 同一對角線上,輸出所有的放置方式。輸入n,表示棋盤大小。深度優先搜尋 dfs 列舉第i個王后的放法,再列舉第i 1個王后的放置方法,直至放置完所有棋子,檢查放置方式是否合法,若合法則輸出 不合法則返回,嘗試...
使用回溯法求解N皇后問題
經典的n皇后問題描述為 在一個n x n的棋盤上放置n個皇后,要求任意的兩個皇后都不在同一行 同一列或同一條對角線上,問在給定n的情況下有多少种放置的方法。求解n皇后最典型的方法是回溯法,此方法的思路可以概括為 在第一行佔據一個位置,接著在下一行佔據一個位置,判斷兩個位置之間是否存在衝突。如果不存在...
回溯法求解N皇后問題。
n皇后問題就是 不存在兩個皇后同行或同列,或在同一斜線上。如下圖所示。黑色塊表示其中一個皇后放在了第二行,第三列。這時,只有綠色圈圈才能放其他的皇后。回溯法的基本思想 確定瞭解空間的組織結構後,回溯法就從開始結點 根結點 出發,以深度優先的方式搜尋整個解空間。這個開始結點就成為一個活結點,同時也成為...
回溯法求解n皇后問題
皇后問題 由n n個方塊排成n行n列的正方形稱為 n元棋盤 如果兩個皇后位於棋盤上的同一行或同一列或同一對角線上,則稱她們為互相攻擊,現要求找使n元棋盤上的n個皇后互不攻擊的所有佈局。假設棋盤上每一行放置一個皇后,分別用自然數0,1,2,n 1。首先定義一個長度為n的一維陣列q,其中每一個元素去q ...