目錄
一、題目描述
二、解題思路
三、**實現
在二維網格 grid 上,有 4 種型別的方格:
返回在四個方向(上、下、左、右)上行走時,從起始方格到結束方格的不同路徑的數目。
每乙個無障礙方格都要通過一次,但是一條路徑中不能重複通過同乙個方格。
示例 1:
輸入:[[1,0,0,0],[0,0,0,0],[0,0,2,-1]]示例 2:輸出:2
解釋:我們有以下兩條路徑:
(0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2)
(0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2)
輸入:[[1,0,0,0],[0,0,0,0],[0,0,0,2]]示例 3:輸出:4
解釋:我們有以下四條路徑:
(0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2),(2,3)
(0,0),(0,1),(1,1),(1,0),(2,0),(2,1),(2,2),(1,2),(0,2),(0,3),(1,3),(2,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)
(0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2),(2,3)
輸入:[[0,1],[2,0]]輸出:0
解釋:
沒有一條路能完全穿過每乙個空的方格一次。
請注意,起始和結束方格可以位於網格中的任意位置。
這道題就是典型的回溯演算法題了。從起始點開始從四個方向走,不斷的往深度方向上走,直到把所有空格走完且剛好到達終點時,這條路徑即為滿足要求的路徑,結果+1;但是這時得到的結果只是滿足條件的一條,要得到全部的結果,必須全部遍歷完所有可能的走法,言外之意就是要往前回溯。
回溯演算法的幾點小心得:
回溯演算法一般是需要全部遍歷的(還沒遇到不需要全部遍歷的情況);往深度方向遍歷,意味著需要遞迴;深度方向找到的結果只是其中之一,還需要往前回溯,才能走完所有的情況
**會有詳細註解
#include using namespace std;
//得到起始點位置
pairgetstart(vector>& grid)
} }return res;
}//得到可以走的格仔的數量
int getvalidgridcount(vector>& grid)
} }return ans;
}//走的方向
vectordx = ;
vectordy = ;
//儲存結果值
int result = 0;
void uniquepathsiii(vector>& grid, vector>& used, int& cnt, int m, int n)
//從當前有效格仔的四個方向走
for (int i = 0; i < 4; i++)
} }}int uniquepathsiii(vector>& grid)
} }int cnt = getvalidgridcount(grid);
pairstart = getstart(grid);
uniquepathsiii(grid, used, cnt, start.first, start.second);
return result;
}int main() ,, };
cout << uniquepathsiii(grid) << " ";
return 0;
}
leetcode No 980 不同路徑 III
承接 不同路徑 i 和 不同路徑 ii,雖然我的解法沒用到動態規劃,但是還是忍不住一塊說了吧。力扣 leetcode cn.com 題目描述 在二維網格grid上,有 4 種型別的方格 返回在四個方向 上 下 左 右 上行走時,從起始方格到結束方格的不同路徑的數目,每乙個無障礙方格都要通過一次。示例...
不同路徑(LeetCode)
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。示例 ...
不同路徑(leetcode)
題目 物體怎樣從左上角移動到右下角,其中1表示有障礙,不能行走。思路 知道整個方框的行和列。對第一行和第一列進行填充1,當碰到1 障礙 填充0。本題可以被視為乙個動態規劃的問題,從上到下,從左到右,其中到達乙個終點的路徑總是左邊路徑 上面路徑。即 d p i j dp i 1 j dp i j 1 ...