三階幻方(暴力破解)

2021-10-09 04:58:21 字數 1440 閱讀 9306

小明最近在教鄰居家的小朋友小學奧數,而最近正好講述到了三階幻方這個部分,三階幻方指的是將1~9不重複的填入乙個3x3的矩陣當中,使得每一行、每一列和每一條對角線的和都是相同的。

三階幻方又被稱作九宮格,在小學奧數里有一句非常有名的口訣:「二四為肩,六八為足,左三右七,戴九履一,五居其中」,通過這樣的一句口訣就能夠非常完美的構造出乙個九宮格來。

4 9 2

3 5 7

8 1 6

有意思的是,所有的三階幻方,都可以通過這樣乙個九宮格進行若干映象和旋轉操作之後得到。現在小明準備將乙個三階幻方(不一定是上圖中的那個)中的一些數抹掉,交給鄰居家的小朋友來進行還原,並且希望她能夠判斷出究竟是不是只有乙個解。

而你呢,也被小明交付了同樣的任務,但是不同的是,你需要寫乙個程式~

輸入格式

輸入僅包含單組測試資料。

每組測試資料為乙個3x3的矩陣,其中為0的部分表示被小明抹去的部分。

對於100%的資料,滿足給出的矩陣至少能還原出一組可行的三階幻方。

輸出格式

如果僅能還原出一組可行的三階幻方,則將其輸出,否則輸出「too many」(不包含引號)。

樣例輸入

0 7 2

0 5 0

0 3 0

樣例輸出

6 7 2

1 5 9

8 3 4

資料規模和約定

峰值記憶體消耗(含虛擬機器) < 256m

cpu消耗 < 1000ms

分析:

(這個題我最先的思路是想通過遍歷把所有排列結果都排出來,但是效果不是很好,後來看了其他人的解法重寫的)

解決思路:

當比對位置為0,直接跳過

比對非零數字,不同直接跳出此輪迴圈

#include

#include

intmain()

,,,,

,,,}

;//輸入的樣例

int testdata[3]

[3];

//為了便於比對,用乙個維陣列來儲存輸入的樣例

int test[9]

;int i, j, k =0;

int count =0;

//用來儲存匹配成功的幻方的索引

int magicindex;

//這裡其實可以直接用一位陣列來儲存,懶癌晚期不想改了

for(i =

0; i <

3; i++)}

for(i =

0; i <

8&& count <

2; i++

) k++;}

k =0;

if(j ==9)

}if(count >1)

else}}

return0;

}

三階幻方(回溯)

題目 時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述三階幻方是最簡單的幻方,又叫九宮格,是由1,2,3,4,5,6,7,8,9九個數字組成的乙個三行三列的矩陣,其對角線 橫行 縱向的的和都為15。輸入無 輸出按字典序輸出所有的滿足條件的幻方矩陣,每兩個數字之間帶乙個空格,行...

三階幻方python解法

三階幻方 1 9共9個數字填入九宮格中,九宮格中間元素為5,各行 列 對角線元素相加和為15。求解出所有符合條件的排列。python解法1 由於九宮格中間元素已確定,剩下元素中選擇乙個數填入tmp 0 0 再選擇乙個數填入tmp 0 1 則剩下元素都可根據已填元素確定,通過兩層巢狀迴圈實現。lst ...

關於「三階幻方」演算法的Java實現

演算法分析 名稱 三階幻方 題目 試將1 9這9個不同的整數填入乙個3x3的 使每行,每列,以及每條對角線上的數字之和相同。解析思路 要滿足題目中的條件,那麼,數字之和必為15,數字5必定是中間的那個數。1.將剩下的數分為幾組 1,9 2,8 3,7 4,6 在 中,這些數字與中間的數字連線會有對應...