文章目录

  • 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:图相关算法相关推荐

  1. 图 相关算法~从头学算法【广搜、 深搜、 拓扑排序、 并查集、 弗洛伊德算法、迪杰斯特拉算法】

    图的相关主流算法主要有: 广度优先搜索 深度优先搜索 拓扑排序 并查集 多源最短路径(弗洛伊德算法) 单源最短路径(迪杰斯特拉算法) 其中呢,最基本的是前两种,也就是平时常用的广搜和深搜,本文中将概要 ...

  2. 【算法学习】图相关算法编程实现-深度优先遍历和广度优先遍历

    一.图的表示 图G=(V,E).要表示一个图,通常有两种方法:邻接表和邻接矩阵.两种方法都既可以表示有向图,也可以表示无向图. 邻接表表示由一个包含|V|个列表的数组组成,其中每个列表对应V中的一个顶 ...

  3. 算法基础:图的相关算法知识笔记

    一.图的相关算法 1.图的分类知识 如下图: 2.生成树概念 对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树. 连通图的生成树具有这样的特征:边的数量 = 顶点数 - ...

  4. c语言最小费用流_策略算法工程师之路-图优化算法(一)(二分图amp;最小费用最大流)...

    目录 1.图的基本定义 2.双边匹配问题 2.1 二分图基本概念 2.2 二分图最大匹配求解 2.3 二分图最优匹配求解 2.4 二分图最优匹配建模实例 2.4.1 二分图最优匹配在师生匹配中的应用 ...

  5. 实战|基于图割算法的木材表面缺陷图像分析

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|新机器视觉 鉴于图割方法的明显优势,白雪冰及其团队采用G ...

  6. 一文详解缺陷检测相关算法!

    缺陷检测是什么? 缺陷检测,是各行业产品质量管理体系中的重要一环,也是产品在正式投入市场应用前最后一道屏障.由于产品可能出现的品质问题多种多样,没有统一的衡量标准,所以一直以来,产品质检都是依靠人工来 ...

  7. Algorithm:树相关算法(BBT/BST/B树/R树)简介(二叉查找树、二叉查找树的插入节点、二叉查找树的删除、二叉树的遍历、平衡二叉树)C 语言实现

    Algorithm:树相关算法(BBT/BST/B树/R树)简介(二叉查找树.二叉查找树的插入节点.二叉查找树的删除.二叉树的遍历.平衡二叉树)C++语言实现 目录 树的基础知识 1.二叉树的遍-前序 ...

  8. python 短进程优先算法_黄哥Python:图深度优先算法(dfs)

    深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法.沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所在边都己被探寻过,搜索将回溯到发现 ...

  9. 图论相关算法理解和总结

    晚上学习了一些图论相关算法: 单源最短路径算法: Bellman-Ford 算法: Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shor ...

最新文章

  1. R系统抽样(systematic sampling)
  2. 使用pytorch创建神经网络并解决线性拟合和分类问题
  3. 使用AIO软件清除日志
  4. shell之for和if实现批量替换多目录下的文件
  5. creo扫描选择多条链作为轨迹_ProE/Creo圆轨迹可变扫描法创建弧顶面,用上便爱上(一)...
  6. Android eMMC 分区详解(转载)
  7. 实例对象的属性和原型对象中的属性重名问题 神奇的原型链 继承 继承案例
  8. configparser操作配置文件
  9. (转)DirectShow9在VS2005或vc6.0下编译出现问题的解决方法
  10. 一体化点焊机将要取代分体式焊钳在汽车制造生产线上的使用
  11. awk 多文件操作2种实现方法
  12. Ranking the Cows(POJ-3275 )
  13. Dotnet中Socket网络通信
  14. HUE与Hive的集成
  15. 创业记-我的技术选型
  16. 寒江独钓——win内核编程读书笔记-1
  17. MVC学习笔记八:WebGrid控件的高级使用
  18. sqlite可视化工具sqliteman的问题
  19. PHP爬虫微博某个话题的所有内容,GitHub - wansho/sina_weibo_crawl: 爬取新浪微博某一话题的数据,可以替代微博搜索接口...
  20. 题解 P4147 【玉蟾宫】

热门文章

  1. ASP.NET跨页面传值技巧总结【转】
  2. 微任务与宏任务与eventloop
  3. git 重新关联远程仓库地址
  4. 安卓桌布显示的dip和px
  5. Ruby. Vs . Python
  6. Navicat for MySQL 连接 Mysql 8.0.11 出现1251- Client does not support authentication protocol
  7. 一文剖析区块链现状:丛林法则下的胜者
  8. 大数据在医疗保健中的真正愿景
  9. 使用OpenSSL为支付宝生成RSA私钥
  10. linux命令学习记录一