1. 程式人生 > 其它 >C語言經典矩陣演算法之列印魔方陣(詳解)

C語言經典矩陣演算法之列印魔方陣(詳解)

技術標籤:C語言演算法演算法c語言矩陣演算法程式人生經驗分享

文章目錄

一、矩陣演算法

1、矩陣
矩陣,是線性代數中的基本概念之一。一個m×n的矩陣就是m×n個數排成m行n列的一個數陣。由於它把許多資料緊湊的集中到了一起,所以有時候可以簡便地表示一些複雜的模型。矩陣乘法看起來很奇怪,但實際上非常有用,應用也十分廣泛。

2、矩陣演算法
矩陣演算法是一種高效的演算法,可以把一些一維遞推優化到log( n ),還可以求路徑方案等,所以更是是一種應用性極強的演算法。

3、矩陣演算法的實現
矩陣演算法通常需要使用二維陣列來實現,矩陣演算法往往需要交換或者存取矩陣中的某個元素,這就需要我們靈活掌握二維陣列兩個下標的變換。

二、列印魔方陣

1、魔方陣
魔方陣,古代又稱“縱橫圖”,是指組成元素為自然數1、2、…、n的平方的n×n的方陣,
其中每個元素值都不相等,且每行、每列以及主、副對角線上各n個元素之和都相等。

2、C語言實現

#include <stdio.h>
#define N 20
void Matrix(); 


void main()
{	
	Matrix();
}

//列印n階魔方陣的函式 
void Matrix()
{
	int a[N][N], n, i, j, k;
	while(1)
	{
		printf("請輸入魔方陣的階數(n<=20,且是奇數):"
); scanf("%d", &n); if(n!=0 && n<=20 && n%2!=0) { printf("%d階魔方矩陣.\n", n); break; } } //初始化二維陣列 for(i=0; i<n; i++) for(j=0; j<n; j++) a[i][j]= 0; //構造魔方陣 i= 0; j= n/2; a[i][j]= 1; //放在第一行的中間一列 k= 2; while(k<=n*n) { i= i-1; //行號減1
j= j+1; //列號加1 if(i<0 && j>n-1) //如果上一個數位與第1行第n列,當前的數應在上一個數的下面 { i= i+2; j= j-1; } else { //如果上一個數位與第1行,則當前的數應位與最後一行 if(i<0) i= n-1; //如果上一個數位與第n列,則當前的數應位與第1列 if(j>n-1) j= 0; } if(a[i][j]==0) //當前的數儲存到陣列中 a[i][j]= k; else //如果已經有數存在你,則放在上一個數的下面 { i= i+2; j= j-1; a[i][j]= k; } k++; //k增加1,準備存放下一個數 } //輸出魔方陣 for(i=0; i<n; i++) { for(j=0; j<n; j++) printf("%4d", a[i][j]); printf("\n"); } }

01
02

參考文獻:《The Function and Algorithm of Program Language C/C++》