使用C 求解N皇后問題。

2021-04-08 17:03:36 字數 994 閱讀 7916

下面這個演算法實現了列出所有可能放置的情況。

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 ...