红足一1世手机版球琛网 红足一1世手机版球琛网 红足一1世手机版球琛网

各种迷宫题(六)

文章目录

6.求矩阵中固定元素的路径(二)

类似于五(一),只是我们没有办法用原矩阵中的值来表示访问过的元素。我们创建一个二维数组vis来记录这个点是否被访问过。对于这道题时间节点流程图时间节点流程图,我们用广度优先和深度优先各做一个。

入党流程时间节点_时间节点流程图_时间节点鱼骨图

dfs代码如下:

class Solution {
public:
    int step;
    int sum(int x){
        int s = 0;
        while(x!=0){
            s +=x;

时间节点流程图_入党流程时间节点_时间节点鱼骨图

x = x/10; } return s; } void dfs(int m,int n,int k,int i,int j,vector>& vis){ if(i>=m||i<0||j>=n||j<0||(sum(i)+sum(j))>k||!vis[i][j]) return; step++; vis[i][j]= false; dfs(m,n,k,i+1,j,vis); dfs(m,n,k,i,j+1,vis);

时间节点流程图_入党流程时间节点_时间节点鱼骨图

} int movingCount(int m, int n, int k) { vector> vis(m,vector(n,true)); step = 0; dfs(m,n,k,0,0,vis); return step; } };

我们每走一步,都需要用step来记录走过的次数,作为可以到达的街区数。

bfs代码如下:

时间节点鱼骨图_时间节点流程图_入党流程时间节点

class Solution {
public:
    int step;
    int sum(int x){
        int s = 0;
        while(x!=0){
            s +=x;
            x = x/10;
        }
        return s;

时间节点鱼骨图_时间节点流程图_入党流程时间节点

} int movingCount(int m, int n, int k) { vector> vis(m,vector(n,true)); queue>q; q.push({0,0,0,0}); int step = 0; while(!q.empty()){ int size = q.size(); for(int i = 0;i时间节点流程图_时间节点鱼骨图_入党流程时间节点

vector x = q.front(); int s1 = x[0],s2=x[1],s3=sum(x[0]),s4=sum(x[1]); if((s3+s4)>k||s1>=m||s1<0||s2>=n||s2<0||!vis[s1][s2]) continue; step++; vis[s1][s2]=false; q.push({s1+1,s2,s3,s4}); q.push({s1,s2+1,s3,s4}); } q.pop(); } return step; } };