首页 > 解决方案 > 只有 k 步的二维数组的 DFS

问题描述

我必须在 2D 数组上做 DFS,但不完全。它应该只在终止前发生 k 步。这意味着从某个特定位置开始,DFS 应该只针对 k 步的左、右、上和下方向的组合工作。对于特定位置的每个 K 步,我正在递增矩阵中的值。这是我的 DFS 代码-

void component(vector<vector<int>>& grid, vector<vector<int> >&visited, int i,int j, int k){
    
    if(i<0 || j<0 || i>=grid.size() || j>=grid[0].size() || visited[i][j]==1 || k < 0){
        return;
    }
    visited[i][j] = 1;
    grid[i][j]++;
    component(grid,visited,i,j-1,k-1);
    component(grid,visited,i+1,j,k-1);
    component(grid,visited,i,j+1,k-1);
    component(grid,visited,i-1,j,k-1);
}

在 DFS 调用之前,网格看起来像这样 -

vector< vector<int> > grid= {{0,0,0,1}, {0,1,0,0}, {0,0,1,0}, {1,0,0,0}, {0,0,0,0}};

我正在调用这样的函数component(grid,visited,row,col)whererowcol是 row 和 col 的索引,其中 1 在网格中找到。(实际上,我正在保存网格中具有 1 的所有位置,然后在完成对 1 的 DFS 调用后再次更新它们 - 这确保我不会为网格跳过任何 1)我没有得到所需的输出我的 DFS 函数。请帮我找出问题所在。

标签: c++2ddepth-first-search

解决方案


推荐阅读