leetcode:图相关算法
生活随笔
收集整理的這篇文章主要介紹了
leetcode:图相关算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 01 矩陣中的路徑
- 02 機器人可達路徑范圍
- 03 禮物價值最大
01 矩陣中的路徑
#include<vector> #include<string> using namespace std;class Solution { public://解法一:深度優先搜索bool exist(vector<vector<char>>& board, string word) {for (int i = 0; i < board.size(); i++){for (int j = 0; j < board[0].size(); j++){if (DFS(board, word, 0, i, j)){return true;}}}return false;}bool DFS(vector<vector<char>>& board, string& word, int k, int i, int j){if (k >= word.size()) return true;if ((i < 0)|| (i >= board.size())|| (j < 0)|| (j >= board[0].size())|| (board[i][j] != word[k])|| (board[i][j] == '\0')){return false;}char ch = board[i][j];board[i][j] = '\0';bool res = (DFS(board, word, k + 1, i + 1, j)|| DFS(board, word, k + 1, i - 1, j)|| DFS(board, word, k + 1, i, j + 1)|| DFS(board, word, k + 1, i, j - 1));if (!res){board[i][j] = ch;}return res;} };02 機器人可達路徑范圍
解法一 廣度優先搜索
解法二 深度優先搜索
class Solution { public://解法1:廣度優先搜索算法int movingCount(int m, int n, int k) {vector<vector<int>> record;for (int i = 0; i < m; i++){vector<int> record_i;for (int j = 0; j < n; j++){record_i.push_back(0);}record.push_back(record_i);}return DFS(m, n, k, 0, 0, record);}int DFS(int m, int n, int k, int i, int j, vector<vector<int>>& record){int ri = i;int rj = j;//位置范圍判斷 以及是否走過判斷if ((i < 0)|| (i >= m)|| (j < 0)|| (j >= n)|| (record[i][j] != 0)) return 0;//限制條件判斷//返回結果record[i][j] = 1;int value = 0;while (i >= 10){value += i % 10;i /= 10;}value += i;while (j >= 10){value += j % 10;j /= 10;}value += j;if (value > k) return 0;int res = 1;res += (DFS(m, n, k, ri + 1, rj, record) + DFS(m, n, k, ri, rj + 1, record));return res;} };03 禮物價值最大
解題思路這一類題目的解法就是動態規劃+正向解題思路
總結
以上是生活随笔為你收集整理的leetcode:图相关算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯实习笔试:关于几个有序数组求交集的问
- 下一篇: leetcode :动态规划