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