C語言 n皇后問題詳解

2021-10-11 14:59:32 字數 822 閱讀 2903

題目描述:八皇后問題

n個皇后兩兩不在一行,不在一列,不在同一對角線上

1.方法1 ——暴力法

/*

* n皇后問題 —— n個皇后兩兩不在一行,不在一列,不在同一對角線上

* 兩種方法: 1、暴力法 2、回溯法

*/#include #include #include #include #define n 8

bool hash[n+1];

int p[n+1];

int count =0;

//暴力法 無優化

void generate(int index)}}

if(flag)

return;

}//生成1~n的排列

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

}}

2.方法2——回溯法實現

**實現:

/*回朔法 

在到達遞迴邊界前的某層,由於一些事實導致已經不再

需要往任何乙個子問題遞迴,就可以直接返回上一層。

*/void generatep(int index)

printf("\n");

return ;

}//第x行

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

}//如果可以把皇后放在第x行

if(flag)}}

}int main()

generatep(1);

printf("%d\n",count);

return 0;

}

n皇后問題c語言 九章演算法 N皇后問題

n皇后問題是將n個皇后放置在n n的棋盤上,皇后彼此之間不能相互攻擊 任意兩個皇后不能位於同一行,同一列,同一斜線 給定乙個整數n,返回所有不同的n皇后問題的解決方案。每個解決方案包含乙個明確的n皇后放置布局,其中 q 和 分別表示乙個女王和乙個空位置。樣例1 輸入 1 輸出 q 樣例2 輸入 4 ...

N皇后 C語言

文章目錄 簡單的搜尋 n皇后問題 題目輸入 輸出樣例輸入 樣例輸出 做題思路 簡單的搜尋 n皇后問題 題目在一張n n的西洋棋棋盤上,放置n個皇后,使得所有皇后都無法互相直接攻擊得到,皇后可以直接攻擊到她所在的橫行,豎列,斜方向上的棋子 現在輸入乙個整數n,表示在n n的棋盤上放n個皇后,請輸出共有...

N皇后問題(c )

在n n格的西洋棋上擺放n個皇后 0 n 10 使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。每行只能放置乙個皇后 每列也只能放置乙個皇后,那麼如果把n列皇后所在的行號依次寫出,那麼就會是1 n 的乙個排列。於是需要列舉1 n 的所有排列,然後檢視每個排列對應...