日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode:图相关算法

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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);}int res = 1;queue<position> que;position start = { 0,0 };que.push(start);while (!que.empty()){position popOut = que.front();que.pop();if (isPositionArrivble(m, n, k, popOut.position_i + 1, popOut.position_j, record)){res++;position temp = { popOut.position_i + 1,popOut.position_j };que.push(temp);}if (isPositionArrivble(m, n, k, popOut.position_i, popOut.position_j + 1, record)){res++;position temp = { popOut.position_i,popOut.position_j + 1 };que.push(temp);}}return res;}struct position {int position_i;int position_j;};bool isPositionArrivble(int m, int n, int k, int i, int j, vector<vector<int>>& record){//位置范圍判斷 以及是否走過判斷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 true;return false;}};

解法二 深度優先搜索

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 禮物價值最大


解題思路這一類題目的解法就是動態規劃+正向解題思路

class Solution { public:int maxValue(vector<vector<int>>& grid) {//初始化第一列for(int i = 1;i < grid.size();i++){grid[i][0] += grid[i-1][0];}//初始化第一行for(int j = 1;j < grid[0].size();j++){grid[0][j] += grid[0][j-1];}//計算其它位置的值for(int i = 1;i<grid.size();i++){for(int j = 1;j<grid[0].size();j++){if(grid[i][j-1] > grid[i-1][j]){grid[i][j] += grid[i][j-1];}else{grid[i][j] += grid[i-1][j];}}}return grid[grid.size()-1][grid[0].size()-1];}}; 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的leetcode:图相关算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。