桐桐的數學遊戲(N皇后)

2022-08-21 06:06:11 字數 1709 閱讀 2908

相信大家都聽過經典的「八皇后」問題吧?這個遊戲要求在乙個8×8的棋盤上放置8個皇后,使8個皇后互相不攻擊(攻擊的含義是有兩個皇后在同一行或同一列或同一對角線上)。

桐桐對這個遊戲很感興趣,也很快解決了這個問題。可是,他想為自己增加一點難度,於是他想求出n皇后的解的情況。

你能幫助她嗎?

輸入格式:

一行,僅有乙個數n(1≤n≤14),表示為n皇后問題。

輸出格式:

輸出僅有乙個數,表示n皇后時問題的解法總數。

輸入樣例:

8
輸出樣例:

92

思路:

從第一行開始放置每乙個皇后,並標記所在的列和對角線。

初始**:

//

程式名:新的c++程式

//#include

#include

#include

using

namespace

std;

int n,b[301],c[105],d[301

],t;

void ch(int j,int i,int

s)void dfs(int

s)

for(int i=1;i<=n;i++)

}}int

main()

**

發現當n=14時,用時超過1秒。

可以利用放置方法的對稱性解決問題。

解決方案:

1.當n為偶數時,第乙個皇后只放在左側,最後再把結果乘2.

//

程式名:新的c++程式

//#include

#include

#include

#include

using

namespace

std;

int n,a[105],b[301],c[105],d[301

],t,m;

void dfs(int

s)

if(n%2==0

)

if(s==1

)

for(int i=1;i<=m;i++)

}else

for(int i=1;i<=n;i++)

}else

for(int i=1;i<=n;i++)

}}int

main()

**

2.當n為偶數時,第乙個皇后只放在左側,反之第乙個皇后放在左側及中線,第二個放在其左邊。最後再把結果乘2.

1

//程式名:新的c++程式2//

34 #include5 #include6 #include7 #include8

9using

namespace

std;

10int n,a[105],b[301],c[105],d[301

],t;

11void dfs(int s,int

k)12

14for(int i=1;i<=k;i++)

1528}29

}30intmain()

31

**

搜尋 桐桐的數學遊戲

第二天叫醒我的不是鬧鐘,是夢想!題目描述 相信大家都聽過經典的 八皇后 問題吧?這個遊戲要求在 個8 8的棋盤上放置8個皇后,使8個皇后互相不攻擊 攻擊的含義是有兩個皇后在同一行或同一列或同一對角線上 桐桐對這個遊戲很感興趣,也很快解決了這個問題。可是,她想為自己增加一點難度,於是她想求出n皇后的解...

桐桐的雷達

有一堆數字,並給出乙個範圍,判斷不在範圍內的數字是否多過10 若不多過,那輸出範圍內數字的平均值 桐桐在去廣州的路上,對高速公路上的測速雷達產生了興趣,於是開始研究有關知識,發現在設計測速雷達時有這樣乙個計算問題 乙個測速雷達都有乙個最高限速和乙個最低限速。如果探測到的資料超過最高限速或低於最低限速...

桐桐的雷達 模擬

description 乙個測速雷達都有乙個最高限速和乙個最低限速。如果探測到的資料超過最高限速或低於最低限速,都認為駕駛員是違規的。為了檢測探測器是否正常工作,雷達自身要週期性的分析一下最近的資料。假設多數駕駛員遵守交通規則,因此如果有超過10 的資料是違規的,則認為探測器可能出了問題。現在根據給...