周泊辰和張子涵返回二維陣列整陣列和
阿新 • • 發佈:2018-11-07
設計思路:首先了解一維陣列的求最大和,可以先列舉出一維陣列的所有子陣列並求出他們的和,即加上一個正的和會增加,反之減少,如果某一個和為負數,那麼就應該放棄他,然後清零。然後求二維陣列最大子陣列的和,可以轉化為求一維陣列最大子陣列的和
設一個二維陣列a[n][m],找它的 最大子陣列之和,先建立一個新的二維陣列b[n][m],二維陣列b[j][k] 存放的是a[j][k](0<=j2.迴圈:從a[0][0]開始 以此是 a[0][1]、 a[0][2]……a[0][m]、a[1][0]、 a[1][1]……a[1][m]、a[2][0]、 a[2][1]……a[2][m]、……a[n][0]、 a[n][1]……a[n][m],當迴圈到a[j][k](0<=j計算方法:根據b[j-1][k]、b[j][k-1]、b[j-1][k-1]的正負情況,來計算b[j][k],根據包含a[j][k]的各種矩陣情況,求得最大值,最後求出b[m][n]中的最大值。
int maxSubArray(int *arr, int len)
{
int i,sum=arr[0],b=0;
for(i=0;i<len;++i)
{
if(b>0)
b+=arr[i];
else
b=arr[i];
if(b>sum)
sum=b;
}
return sum;
}
int maxSubMatrix(int n, int m,int array[102][102])
{
int i,j,h,max,sum=-100000;
int b[102];
for(i=0;i<n;i++)
{
memset(b,0,sizeof(b));
for(j=i;j<n;j++)
{
for(h=0;h<m;h++)
{
b[h]+=array[j][h];
}
max=maxSubArray(b,h);
if(max>sum)
sum=max;
}
}
return sum;
}
int main(void)
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{ for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
printf("%d\n",maxSubMatrix(n,n,a));
}
return 0;
} 小隊成員 周泊辰 張子涵 除錯 張子涵 編碼 周泊辰 總結 多查書然後多上網看別人的設計思路不管你看沒看那懂,結合各自的優點來進行程式設計,努力學習c語言應用。