原题链接
利用其部分排序的性质,从右上角开始,采用BFS方法。花了好长时间啊TAT,算是对BFS实现加深印象了吧。
自己好菜555
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
if (matrix.empty() || matrix[0].empty()) return false;
int row = matrix.size(), col = matrix[0].size();
int st[row][col];
memset(st, -1, sizeof st);
queue<pair<int, int>> q;
// 右上角的点入队
q.push({0, col - 1});
while (q.size())
{
auto t = q.front();
if (matrix[t.first][t.second] == target) return true;
q.pop();
for (int i = 0; i < 4; i ++)
{
int x = t.first + dx[i], y = t.second + dy[i];
if (x >= 0 && x < row && y >= 0 && y < col && st[x][y] == -1)
{
q.push({x, y});
st[x][y] = 0;
}
}
}
return false;
}
};