設M 是一個m×n 的矩陣,其中每行的元素從左到右單增有序,每列的元素從上到下單增有序。 給出一個分治演算法計算出給定元素x 在M 中的位置或者表明x 不在M 中。分析演算法的時間複雜性。
阿新 • • 發佈:2019-01-29
#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; }