把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...