太平洋大西洋水流问题

说来 真是 有辱 信竞 门面,很久很久之后 真的连代码都不会写了!!!

忘了很多东西,唔

这题昂是个水题

然鹅,我不知道为何那么多讲回溯啥的,奇怪???

最害怕记录途径嘿

但是这道题很水,很水,很水!!!裸搜嘿!!!

好吧,问题在于  不会计算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;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值