左下幻方演算法
① 幻方演算法
N為4的倍數時
採用對稱元素交換法。
首先把數1到n×n按從上至下,從左到右順序填入矩陣
然後將方陣的所有4×4子方陣中的兩對角線上位置的數關於方陣中心作對
稱交換,即a(i,j)與a(n-1-i,n-1-j)交換,所有其它位置上的數不變。
(或者將對角線不變,其它位置對稱交換也可)
N 為其它偶數時
當n為非4倍數的偶數(即4n+2形)時:首先把大方陣分解為4個奇數(2m+1階)子方陣。
按上述奇數階幻方給分解的4個子方陣對應賦值
上左子陣最小(i),下右子陣次小(i+v),下左子陣最大(i+3v),上右子陣次大(i+2v)
即4個子方陣對應元素相差v,其中v=n*n/4
四個子矩陣由小到大排列方式為 ① ③
④ ②
然後作相應的元素交換:a(i,j)與a(i+u,j)在同一列做對應交換(j<t或j>n-t+2),
a(t-1,0)與a(t+u-1,0);a(t-1,t-1)與a(t+u-1,t-1)兩對元素交換
其中u=n/2,t=(n+2)/4 上述交換使每行每列與兩對角線上元素之和相等。
奇階
首行中間寫1,然後向右上依次填2,3順著寫,出上移下,出右移左,雙出(邊角)就寫在那個數下邊。
② 怎樣用C語言編寫幻方
你的這個問題實際上包括兩個問題:
1、幻方的演算法
2、怎樣用C語言實現幻方的演算法
這兩個問題是大不同的。
關於幻方的演算法,或者叫幻方填法,目前有很多種,拉丁正交、馬步法等等,針對奇數或者偶數(又分單偶數和雙偶數)等有不同的演算法,但這些演算法只是幫你找到幻方的一個或多個實例(不會是全部),而同階數的幻方到底有多少個,那隻有用窮舉法了,比如4階幻方,基本4階幻方共7040個,剔除旋轉翻轉的,即具有獨立結構的共880個;4階完美幻方共84個,具有獨立結構的共48個。
對於高階幻方(比如超過8階),窮舉法實際上是不可行的,因為它的窮舉時間將是天文數字(以目前主流PC),所以不要試圖用計算機窮舉高階幻方的全部結果,那將是徒勞的。
如果你只是需要1個實例,那麼推薦你使用MATLAB語言工具,因為它提供了幻方函數magic(n),不需要編程,直接從命令窗口輸入就可以得到答案。
至於第二個問題,當然你首先會C語言,剩下的就是編程技巧問題了,而這個問題是無從回答的。相信你問的是第一個問題。
以上的回答雖然沒有明確給出答案,但相信對你會有幫助。
③ 幻方解法
按照圖片的方法樓梯法填寫9個數,然後「中部四數各向外挺出「,就得到結果了。下面是5階幻方的演示,其實3階幻方也是一樣的。