最大子矩陣 C語言實現

2021-10-05 22:49:56 字數 1311 閱讀 1336

演算法核心:

先將二維陣列處理為一維陣列,再對一維陣列進行最大連續子串行求和,這裡最大連續子串行求和採用的是遞推的方法。

演算法步驟:

(1)將原矩陣初始化,並建立乙個臨時二維矩陣,該矩陣的第i行表示的是原矩陣前i行的和;

(2)採用窮舉的方法,計算二維矩陣所有可能的連續行的列的和,使其壓縮為一維陣列;

(3)對步驟(2)中得到的每乙個陣列進行最大子串行求和,同時,不斷更新最大值。

例項以及**

問題描述:給定乙個矩陣,找到最大的子矩陣。

//定義資料,a是原矩陣,t是臨時矩陣,用於儲存行的和

int a[10]

[10]=

,t[10][

10]=;

int t1,t2;

//一維陣列的最大子列和的範圍

int l1,l2,h1,h2;

//最大子矩陣的範圍

//初始化矩陣

intinput()

//計算乙個臨時的矩陣和矩陣

void

temporary

(int n)

//對一維陣列進行最大子列求和

intonesequence

(int a,

int n)

if(sum<0)

else

e++;}

//printf("%d----%d max=%d",t1,t2,max);

return max;

}

//處理二維矩陣的行,壓縮為一維陣列

inttwosequence

(int n)

else

m=onesequence

(temp,n)

;//處理一維陣列

if(m>max)

}return max;

}

//格式化輸出

void

output

(int max)

printf

("最大子矩陣和為:%d"

,max)

;//輸出 最大和

}

//主函式,負責呼叫以上函式

intmain()

執行結果:

最大子陣列問題及C語言實現

對於乙個連續的陣列a n 要求連續子陣列,使得該子陣列的和最大。比如陣列,最大子陣列為,和為32。方法一 窮舉法。即將任取陣列中的兩個元素,算出兩者之間 包括這兩個元素本身 所有元素之和。窮舉所有組合,比較得到最大值。該方法複雜度為n的三次方。include include int sort int...

最大子列和問題(C語言實現)

最大子列和問題 pta 程式設計類實驗輔助教學平台 給定k 個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情...

演算法導論筆記 最大子陣列C語言實現

在分治策略中我們將遞迴的求解乙個問題,在每層遞迴中有如下三個步驟。分解將問題劃分為一些子問題,子問題形式與原問題一樣,只是規模更小。解決遞迴的求解出子問題。如果子問題規模足夠小,則停止遞迴,直接求 解。合併將子問題的解合併為原問題的解。需要遞迴求解時,我們稱之為遞迴情況,當子問題足夠小時,不需要遞迴...