/*演算法分析:
* 名稱:三階幻方
* 題目:試將1~9這9個不同的整數填入乙個3x3的**,使每行,每列,以及每條對角線上的數字之和相同。
* 解析思路:
* 要滿足題目中的條件,那麼,數字之和必為15,數字5必定是中間的那個數。
* 1.將剩下的數分為幾組(1,9),(2,8),(3,7),(4,6)
* 在**中,這些數字與中間的數字連線會有對應關係通過這些對應關係來得到我們想要的結果。
* 2.將**編號從左到右,從下到上依次為0~8,
* 3.遍歷所有的數字:
* 從第0個格仔開始,這個數可以是5之外的任何數,但是,這個數確定後,與之對應的8號格仔的數字也就確定了。
* 填充第1個格仔,這個格仔中的數字可以是除去5,0號格仔,8號格仔之外的數,找到這個格仔的數後,第7號格仔的數也就確定了。
* 0號和1號可以確定2號格仔的數字,2號格仔的數字確定後,6號格仔的數字也就確定了。
* 6號格仔和0號格仔可以確定3號格仔的數字,從而確定5號格仔的數字,
* 這樣,所有格仔的數字都確定了,最後檢測6,7,8是否符合規則(即,和是否為15),2,5,8是否符合規則,如果都符合那麼這就是我們
* 要的結果了。
* */
public static void threemap()
int row = 0 ;
int col = 0 ;
row = i / 3 ;
col = i % 3 ;
elearray[i] = new mapele(row,col,0) ;
}for(int i = 1 ; i <= 9 ; i++)
elearray[0].setvalue(i) ;
elearray[8].setvalue(gettweennum(i)) ;
for(int j = 1 ; j <= 9; j++)
elearray[1].setvalue(j) ;
elearray[7].setvalue(gettweennum(j)) ;
int tempnum = 15 - i - j ;
if(tempnum > 9 || tempnum < 1 || tempnum == 5)
elearray[2].setvalue(15 - i - j);
elearray[6].setvalue(gettweennum(15 - i - j)) ;
tempnum = 15 - i - gettweennum(15 - i - j) ;
if(tempnum > 9 || tempnum < 1 || tempnum == 5)
elearray[3].setvalue(15 - i - gettweennum(15 - i - j));
elearray[5].setvalue(gettweennum(elearray[3].getvalue())) ;
//檢測是否合格,如果合格,那麼輸出陣列,如果不合格,繼續檢測。
if(elearray[6].getvalue() + elearray[7].getvalue() + elearray[8].getvalue() == 15
&& elearray[2].getvalue() + elearray[5].getvalue() + elearray[8].getvalue() == 15)
system.out.println();}}
}}public static int getagnistnum(int _num)
return num ;
}public static int gettweennum(int num)
}
三階幻方(回溯)
題目 時限 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 ...
三階幻方(暴力破解)
小明最近在教鄰居家的小朋友小學奧數,而最近正好講述到了三階幻方這個部分,三階幻方指的是將1 9不重複的填入乙個3x3的矩陣當中,使得每一行 每一列和每一條對角線的和都是相同的。三階幻方又被稱作九宮格,在小學奧數里有一句非常有名的口訣 二四為肩,六八為足,左三右七,戴九履一,五居其中 通過這樣的一句口...