n皇后問題 兩種方法解決(c語言實現)

2021-08-25 22:43:45 字數 782 閱讀 7243

/*

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

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

* @author 李政 <[email protected]>

*/#include

#include

#include

#include

#define n 8

bool hash[n+1];

int p[n+1];

intcount =0;

//暴力法 無優化

void generate(int

index)}}

if(flag)

return;

}//生成1~n的排列

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

}}/*回朔法 有優化

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

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

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等於4時,有兩種擺法。輸入只有乙個整數n。思路如果我們是從這個n n的棋盤中選取n個方格放皇后,再去判斷是否滿足條件的話,則效率會非常低,這是乙個組合數 complement...

兩種方法解決約瑟夫問題

第一種 構建迴圈鍊錶,然後不斷遍歷鍊錶直到剩下最後乙個元素。include include include include include include using namespace std typedef struct list list,link int main p next head n...

兩種方法解決排列問題

time limit 1.000 sec memory limit 128 mb problem description 有4個互不相同的數字,請按序輸出由其中三個不重複數字組成的排列。input 4個整數。output 所有排列,輸出順序見樣例。sample input 1 2 3 4 out i...