在八皇后的92種解中有大量的解是本質重複的
可以通過左右對稱,上下對稱,對角線對稱,旋轉來互相轉化
只有十二種解是本質不同的。
#include
int w=1;
intcheck
(int m)
;void
put(
void);
intcheck3
(void);
intcheck2
(void);
void
firstdiagonal()
;void
seconddiagonal()
;void
updown()
;void
leftright()
;void
queen
(int r)
;void
printf
(void);
int k=
0,a[
100]
=,n,b[
100]
[100]=
;//陣列b用來存放滿足條件的棋盤
#define n 8
void
queen
(int r)}}
}int
check
(int r)
return1;
}void
leftright()
for(i=
1;i<=n;i++)}
void
updown()
for(i=
1;i<=n;i++)}
void
seconddiagonal()
for(i=
1;i<=n;i++)}
void
firstdiagonal()
for(i=
1;i<=n;i++)}
intcheck2
(void
)else
updown()
;if(check3()
)else
seconddiagonal()
;if(check3()
)else
firstdiagonal()
;if(check3()
)else
firstdiagonal()
;//順時針旋轉 90°
updown()
;if(check3()
)else
seconddiagonal()
;//逆時針旋轉90°
leftright()
;if(check3()
)else
updown()
;//順時針旋轉180°
leftright()
;if(check3()
)else
seconddiagonal()
;updown()
;if(check3()
)else
return0;
//無重複
}int
check3
(void)if
(flag==n)
return1;
//有重複
else
flag=0;
}return0;
}void
put(
void
)void
printf
(void)if
(i!=w-1)
printf
("\n");
}}intmain
(void
)
我們只要將n定義為乙個全域性變數,就會得到一段n皇后本質不同解的**。 八皇后的12組等效解
請使用回溯法程式設計,輸出8皇后的所有解,並統計其中等效解的個數 所謂等效解是指,如果將解a 上下翻轉,左右翻轉,90度旋轉等任意組合,如果能得到b,則稱a和b為等效解 要求 1.輸出形式 如果有n個等價類 組1 共10個 1,2,x8 組2 共.個 組n 共.個 其中 x1,x2,x8 的含義是在...
八皇后的92種解法
package com.recursion.implementation public class eightqueen 方法,放置第n個皇后 第一行第一列的方法為 1 8 7 private void check int n 如果沒有到最後則依次放入 for int i 0 i max i 如果衝...
噁心的八皇后全解python版
import random defconflict state,nextx nexty len state for i in range nexty if abs state i nextx in 0,nexty i 這塊我看到了網上的一些誤導,這裡只查 對角線關係和不同行同列關係 同行問題已經在p...