问题:设M是一个n*n的整数矩阵,其中每一行(从左到右)和每一列(从上到上)的元素都按升序排列。设计算法确定一个给定的整数x是否在M中。
算法思路:
矩阵最右上角的元素是比较特殊的,若它大于x时,则x不在最右列;若它小于x,则x不在最上行。
1、if 矩阵没有元素,返回false;
2、if 矩阵右上角的元素==x,返回true;
3、if 矩阵右上角的元素>x,删除最右列,执行1;
4、if 矩阵右上角的元素<x,删除最上行,执行1;
#include<stdio.h>
#define LOW 4
#define COL 4
int a[LOW][COL]={ {1,8,9,12},{2,13,15,16},{15,16,17,18},{18,20,25,30} };
int x;
bool find(int i,int j)
{
if (i>=LOW || j<0)
return false;
if (x==a[i][j])
return true;
if (x>a[i][j])
return find(i+1,j);
else
return find(i,j-1);
}
void main()
{
scanf("%d",&x);
printf("%d\n",find(0,3) );
}