马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述:
- 在二维网格 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
- 解释:
- 没有一条路能完全穿过每一个空的方格一次。
- 请注意,起始和结束方格可以位于网格中的任意位置。
-  
- 提示:
- 1 <= grid.length * grid[0].length <= 20
复制代码
- class Solution {
- public:
- void dfs(vector<vector<int> > &grid, int& res, vector<vector<int> >& visit,
- int start1, int start2, int sum, int len){
- if(grid[start1][start2] == -1|| visit[start1][start2] == 3)return;
- if(grid[start1][start2] == 2){
- if(sum == len-1)res++;
- return;
- }
- visit[start1][start2] = 3;
- if(start1 + 1 < grid.size())dfs(grid, res, visit, start1+1, start2, sum, len+1);
- if(start1 - 1 >= 0)dfs(grid, res, visit, start1-1, start2, sum, len+1);
- if(start2 + 1 < grid[0].size())dfs(grid, res, visit, start1, start2+1, sum, len+1);
- if(start2 - 1 >= 0)dfs(grid, res, visit, start1, start2-1, sum, len+1);
- if(grid[start1][start2] == 1)return;
- else visit[start1][start2] = 0;
- }
- int uniquePathsIII(vector<vector<int>>& grid) {
- int res = 0;
- int len1 = grid.size(), len2 = grid[0].size();
- vector<vector<int> > visit = grid;
- int start1,start2;
- int sum = 0;
- for(int i = 0; i < len1; i++){
- for(int j = 0; j < len2; j++){
- if(grid[i][j] == 1){
- start1 = i;
- start2 = j;
- }
- else if(grid[i][j] == 0) sum++;
- }
- }
- dfs(grid, res, visit, start1, start2, sum, 0);
- return res;
- }
- };
复制代码 |