您的位置:首页 > 其它

设M 是一个m×n 的矩阵,其中每行的元素从左到右单增有序,每列的元素从上到下单增有序。 给出一个分治算法计算出给定元素x 在M 中的位置或者表明x 不在M 中。分析算法的时间复杂性。

2013-05-21 18:47 961 查看
#include "stdio.h"
int M[5][5]=
{
{ 1, 2, 3, 4, 5},
{ 6, 7, 8, 9,10},
{11,12,13,14,15},
{16,17,18,19,20},
{21,22,23,24,25}
};
int x=26;
int MatrixBinary(int M[5][5],int rb,int re,int cb,int ce)
{
int rm=(rb+re)/2;
int cm=(cb+ce)/2;
if (rb>re || cb>ce)
{
return 0;
}
if(x==M[rm][cm])
{
printf("rowStart=%d colStart=%d M[rm][cm]=%d\n",rm,cm,M[rm][cm]);
return 1;
}
else if (rb==re && cb==ce)
{
return 0;
}
if(x>M[rm][cm])
{
return MatrixBinary(M,rb,re,cm+1,ce)||MatrixBinary(M,rm+1,re,cb,cm);
}
else
{
return MatrixBinary(M,rb,rm-1,cb,ce)||MatrixBinary(M,rm,re,cb,cm-1);
}
}
int main()
{
int a=MatrixBinary(M,0,4,0,4);
printf("flag=%d\n",a);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐