在二维网格
grid
上,有 4 种类型的方格:
1
表示起始方格。且只有一个起始方格。2
表示结束方格,且只有一个结束方格。0
表示我们可以走过的空方格。-1
表示我们无法跨越的障碍。返回在四个方向(上、下、左、右)上行走时,从起始方格到结束方格的不同路径的数目,每一个无障碍方格都要通过一次。
示例 1:
输入:[[1,0,0,0],[0,0,0,0],[0,0,2,-1]] 输出:2 解释:我们有以下两条路径: 1. (0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2) 2. (0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2)
示例 2:
输入:[[1,0,0,0],[0,0,0,0],[0,0,0,2]] 输出:4 解释:我们有以下四条路径: 1. (0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2),(2,3) 2. (0,0),(0,1),(1,1),(1,0),(2,0),(2,1),(2,2),(1,2),(0,2),(0,3),(1,3),(2,3) 3. (0,0),(1,0),(2,0),(2,1),(2,2),(1,2),(1,1),(0,1),(0,2),(0,3),(1,3),(2,3) 4. (0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2),(2,3)
示例 3:
输入:[[0,1],[2,0]] 输出:0 解释: 没有一条路能完全穿过每一个空的方格一次。 请注意,起始和结束方格可以位于网格中的任意位置。
reference binding to misaligned address
出现此错误是数组越界。一道DFS,只需要记录空白格子的个数,即需要走的步数。
其余的注释写在了代码里。
int res=0; int d[4][2]={1,0,-1,0,0,1,0,-1}; class Solution { public: int uniquePathsIII(vector<vector<int>>& grid) { int xs,ys,step=1; //初始化1是因为走到终点也需要一步 xs=ys=0; for(int i=0;i<grid.size();i++) { for(int j=0;j<grid[i].size();j++) { if(grid[i][j]==0) //记录空白格的数量,也就是要走的步数 { step++; } if(grid[i][j]==1) { xs=i; ys=j; } } } dfs(grid,xs,ys,step); return res; } void dfs(vector<vector<int>>& grid,int x,int y,int step) { if(grid[x][y]==2&&step==0) { res++; return; } int pre=grid[x][y]; grid[x][y]=-1; for(int i=0;i<4;i++) { int dx=x+d[i][0]; int dy=y+d[i][1]; if(dx>=grid.size()||dx<0||dy>=grid[0].size()||dy<0||grid[dx][dy]==-1) //越界或者已访问 continue; dfs(grid,dx,dy,step-1); } grid[x][y]=pre; } };
Leetcode 980. 不同路径 III DFS
最新推荐文章于 2023-01-30 09:11:25 发布