#include "iostream"
using namespace std;
int main(int argc, char *argv[])
{
int m , n;
int t;
cin >> m >> n;
while (m != 0 && n != 0)
{
cin >> t;
int array[m][n];
bool flag = false;
for(int i = 0; i < m; i++)
for( int j = 0; j < n; j++)
{
cin >> array[i][j];
}
if(array[0][0] == t)
{
flag = true;
}
else
{
int rr = 1;
for(rr;rr < m; rr++)
{
if(array[rr][0] == t)
{
flag = true;
}
else if(array[rr-1][0] < t && array[rr][0] > t)
{
int j = 1;
for( j;j < n;j++)
{
if(array[rr-1][j] == t)
{
flag = true;
}
}
}
}
}
if(flag == true)
cout << "Yes";
else
cout << "No";
cin >> m >> n;
}
return 0;
}
思路:
考虑到矩阵每行从左至右递增,每列从上至下递增,假设需要查找的变量为t,则t可以先和左下角元素比较,设左下角元素为arr[row-1][0]。
若t > arr[row-1][0],则t只能和arr[row-1][0]右边的元素比较,即比较t与arr[row-1][1],若t < arr[row-1][0],则t只能与arr[row-1][0]上面的元素比较,即比较arr[row-2][0]。
以此类推,直至找到t,或者走出矩阵。
细节:
第1行,保含内置头文件一般用尖括号。
第6行,变量名尽量表意,这里可以写int row, col;
第12行,可以在循环外预先定义一个大数组,每次循环都定义数组效率比较低。如const int MAXN = 10000;int array[MAXN][MAXN];