说来 真是 有辱 信竞 门面,很久很久之后 真的连代码都不会写了!!!
忘了很多东西,唔
这题昂是个水题
然鹅,我不知道为何那么多讲回溯啥的,奇怪???
最害怕记录途径嘿
但是这道题很水,很水,很水!!!裸搜嘿!!!
好吧,问题在于 不会计算DFS的复杂度!!! 为什么一直停留在指数级别的印象呢???
看来要好好学习了!!!!大学生活加油呀!!!!!
话说 力扣 真神奇 ! 是我太菜了???
可怕的力扣,很反竞赛有木有!!! 不严谨吗???
class Solution {
public:
int A[155][155],N,M;
bool jud1[155][155],jud2[155][155];
bool ran (int x,int y){
if ( x>=1 && y>=1 && x<=N && y<=M) return true;
else return false;
}
void DFS1(int x,int y){
if (jud1[x][y]) return ;
jud1[x][y] = 1;
if ( ran(x,y-1) && A[x][y] <= A[x][y-1] ) DFS1(x,y-1);
if ( ran(x,y+1) && A[x][y] <= A[x][y+1] ) DFS1(x,y+1);
if ( ran(x-1,y) && A[x][y] <= A[x-1][y] ) DFS1(x-1,y);
if ( ran(x+1,y) && A[x][y] <= A[x+1][y] ) DFS1(x+1,y);
return;
}
void DFS2(int x,int y){
if (jud2[x][y]) return ;
jud2[x][y] = 1;
if ( ran(x,y-1) && A[x][y] <= A[x][y-1] ) DFS2(x,y-1);
if ( ran(x,y+1) && A[x][y] <= A[x][y+1] ) DFS2(x,y+1);
if ( ran(x-1,y) && A[x][y] <= A[x-1][y] ) DFS2(x-1,y);
if ( ran(x+1,y) && A[x][y] <= A[x+1][y] ) DFS2(x+1,y);
return;
}
vector<vector<int>> pacificAtlantic(vector<vector<int>>& matrix) {
vector<vector<int> > pr ;// vector<int> A;
N = matrix.size(); // Size 多了一个
if (N < 1) return pr;
M = matrix[0].size();
for (int i=0;i<N;++i){
for (int j=0;j<M;++j){
int x = matrix[i][j];
A[i+1][j+1] = x ;}}
for (int i=1;i<=M;++i) DFS1(1,i);
for (int i=1;i<=N;++i) DFS1(i,1);
for (int i=1;i<=M;++i) DFS2(N,i);
for (int i=1;i<=N;++i) DFS2(i,M);
for (int i=1;i<=N;++i)
for (int j=1;j<=M;++j)
if ( jud1[i][j] && jud2[i][j] )
pr.push_back({i-1,j-1});
return pr;
}
};