四階幻方 反幻方c

2021-10-05 21:55:46 字數 1912 閱讀 8732

把1~16的數字填入4x4的方格中,使得行、列以及兩個對角線的和都相等,滿足這樣的特徵時稱為:四階幻方。

四階幻方可能有很多方案。如果固定左上角為1,請計算一共有多少種方案。

比如:1 2 15 16

12 14 3 5

13 7 10 4

8 11 6 9

以及:1 12 13 8

2 14 7 11

15 3 10 6

16 5 4 9

就可以算為兩種不同的方案。

#include

#include

using namespace std;

int a[17]

;int b[17]

;void

dfs(

int step)

;int sum=0;

intmain()

void

dfs(

int step)

else

if(step==9)

else

if(step==11)

else

if(step==12)

else

if(step==13)

else

if(step==14)

else

if(step==15)

else

if(step==16)

else

if(step==17)

for(

int i=

2;i<=

16;i++)if

(b[i]

)}

我國古籍很早就記載著29

4753

618這是乙個三階幻方。每行每列以及對角線上的數字相加都相等。

下面考慮乙個相反的問題。

可不可以用 1

~9 的數字填入九宮格,使得:每行每列每個對角線上的數字和都互不相等呢?

這應該能做到。

比如:912

8437

56你的任務是搜尋所有的三階反幻方。並統計出一共有多少種。旋轉或映象算同一種。

比如: 912

8437

5678

9541

6322

1934

8657

#include

#include

#include

using namespace std;

int a[9]

=;intmain()

while

(next_permutation

(a,a+9)

);cout<}

next_permutation(a,a+9)全排列函式

}例如輸入

1 0 2

如果有sort()

輸出為0 1 2

0 2 1

1 0 2

1 2 0

2 0 1

2 1 0

若無則輸出為

1 0 2

1 2 0

2 0 1

2 1 0

發現函式next_permutation()是按照字典序產生排列的,並且是從陣列中當前的字典序開始依次增大直至到最大字典序

藍橋杯 四階幻方 C語言

把1 16的數字填入4x4的方格中,使得行 列以及兩個對角線的和都相等,滿足這樣的特徵時稱為 四階幻方。四階幻方可能有很多方案。如果固定左上角為1,請計算一共有多少種方案。比如 1 2 15 16 12 14 3 5 13 7 10 4 8 11 6 9 以及 1 12 13 8 2 14 7 11...

四階幻方 藍橋杯 DFS

答案 416 用next permutation 全部排列的話會超時 所以用dfs搜尋,只搜尋前三行就好,前三行確定之後,第四行也就確定 include include include include using namespace std int vis 17 a 5 5 int ans 0 in...

藍橋杯2015決賽 四階幻方

萬萬沒想到能拿到省一,以為第一次能拿個省二就不錯了,有些意外。那麼就從此題再次開啟我的藍橋杯刷題之旅把!求第i行的和 if sum 34 return0 return1 bool check for int j 0 j 4 j 列 return1 void dfs int step return i...