第一次是这样做的,看到二维数组在行、列都是递增有序,就直接想到了算法书上学的二分搜素技术。于是,将二维数组的元素压缩,用一维数组存储。然后,再用二分查找的方法对一维数组查找并判断。代码如下:
#include <iostream>
using namespace std;
int a[1001][1001];
int b[1000001];
int i,j;
void judge(int b[],int mul,int t){
int low,high,mid;
low=0;
high=mul-1;
mid=0;
if(t>b[high]||t<b[low])
cout<<"No"<<endl;
else{
if(low<=high){
mid=(low+high)/2;
if(t==b[mid])
cout<<"Yes"<<endl;
if(t<b[mid])
high=mid-1;
else
low=mid+1;
}
else
cout<<"No"<<endl;
}
}
int main()
{
int m,n;
int t;
int p;
int mul;
while(cin>>m>>n>>t){
p=0;
mul=m*n;
for(i=0;i<m;i++){
for(j=0;j<n;j++,p++){
cin>>a[i][j];
b[p]=a[i][j];
}
}
judge(b,mul,t);
}
return 0;
}
但是,WA了,原因超时。。。。。。。。
继续代码尝试:
#include <iostream>
using namespace std;
int a[1001][1001];
int i,j;
bool judge(int b[][1001],int m,int n,int num){
bool find=false;
if(m>0&&n>0){
int row=0;
int col=n-1;
while(row<m&&col>=0){
if(b[row][col]==num){
find=true;
break;
}
else if(b[row][col]>num)
--col;
else
++row;
}
}
return find;
}
int main()
{
int m,n;
int t;
while(cin>>m>>n>>t){
bool flag=false;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
cin>>a[i][j];
}
}
flag=judge(a,m,n,t);
if(flag==true)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
依旧超时。。。。。我很无语。。。。。。。。。。。。再想吧!!!!