当前位置: 首页 > 编程语言 > C#

如何实现Kadane的二维矩阵共享算法

时间:2023-04-11 00:56:21 C#

如何实现Kadane的二维矩阵算法我想弄清楚如何实现Kadane的二维矩阵算法的C#代码。我在这里找到了一个版本:Kadane'salgorithmforfindingsub-arrayswithmaximumsum但我想要一个2D版本。基本上,给定一个由正数和负数组成的NxN矩阵,我需要找到一个子矩阵,其中所有元素的总和最大。弄清楚了。对于那些感兴趣的人staticvoidMain(string[]args){int[,]array2D=newint[,]{{1,2},{-3,4},{5,-6},{-7,-8}};varmax=GetMaxMatrix(array2D);控制台.WriteLine(最大);}publicstaticintGetMaxMatrix(int[,]original){intmaxArea=int.MinValue;introwCount=original.GetLength(0);intcolumnCount=original.GetLength(1);int[,]matrix=PrecomputeMatrix(原版);for(introw1=0;row1这个问题太诱人了,就这样吧:-)我在这里找到了这个问题的C/C++解决方案,基本上我把它翻译成了C#。该解决方案适用于int:s,但将其转换为您喜欢的数字类型应该相当容易。您可能还想以某种方式返回findMaxSum的结果,我将findMaxSum作为练习。以上就是C#学习教程的全部内容:如何实现二维矩阵的Kadane算法。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注---//Driverprogramtotest2DKadanemethodvoidMain(){int[,]M={{1,2,-1,-4,-20},{-8,-3,4,2,1},{3,8,10,1,3},{-4,-1,1,7,-6}};找到最大和(M);}//一维数组的Kadane算法的实现。该函数返回//最大总和并将最大总和子数组的起始索引和结束索引存储//在开始指针和结束指针分别指向的地址处。intkadane(int[]arr,outintstart,outintfinish,intn){//初始化总和,maxSumintsum=0;intmaxSum=Int32.MinValue;//只是一些初始值来检查所有负值casestart=-1;完成=-1;intlocal_start=0;对于(inti=0;imaxSum){maxSum=sum;开始=本地开始;完成=我;}}//至少有一个非负数if(finish!=-1)returnmaxSum;//特殊情况:当arr[]中的所有数字都是负数时maxSum=arr[0];开始=完成=0;//查找数组中的最大元素for(inti=1;imaxSum){maxSum=arr[i];开始=完成=我;}}返回最大值;}//在M[][]中找到最大和矩形的主函数voidfindMaxSum(int[,]M){intROW=M.GetLength(0);intCOL=M.GetLength(1);//存储最终输出的变量intmaxSum=Int32.MinValue;intfinalLeft=-1,finalRight=-1,finalTop=-1,finalBottom=-1;//设置左列为(intleft=0;leftmaxSum){maxSum=sum;finalLeft=左;finalRight=正确的;最终顶部=开始;finalBottom=完成;}}}//打印最终值Console.WriteLine("(Top,Left)({0},{1})",finalTop,finalLeft);Console.WriteLine("(底部,右侧)({0},{1})",finalBottom,finalRight);Console.WriteLine("最大总和为:{0}n",maxSum);}本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: