八皇后12種本質不同的解

2021-10-12 07:10:32 字數 1895 閱讀 3912

在八皇后的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...