
图
还没题目
重you小垃
这个作者很懒,什么都没留下…
展开
-
图的模板 总结
1.求有向无环图的拓扑排序 ---------------------------------------------------O(顶点数+边数)思路:用indegree[]数组存每个结点的入度,将入度为0的节点放入队列,每出队一个结点u,就将它所能到的所有节点v的入度-1(用vector v[indegree.size()]来存),如果v的入度为0,则入队。如果要求按照节点递增的顺序拓扑排序,则将队列改为:优先队列step1:先得到邻接表+入度数组step2:队列写个循环2.优先队列求dij原创 2021-12-05 22:46:20 · 367 阅读 · 0 评论 -
329. 矩阵中的最长递增路径(困难,有向无环图找最长路径长度)
思路一:对每个结点dfs,该结点的最长路径长度=max(能到达的结点的最长路径长度+1),由于存在重复子问题,因此可 加入 记忆化进行优化。思路二:对从出度为0的结点开始进行逆拓扑排序,bfs的层数为最长路径长度。思路一:记忆化dfs具体思路:dp[i][j] = max(dp[m][n] + 1)其中matrix[i][j] < matrix[m][n]边界:matrix[m][n]比周边都大思路二:从出度为0的结点开始进行逆拓扑排序...原创 2022-07-06 10:14:06 · 349 阅读 · 0 评论 -
leetcode743. 网络延迟时间(中等, dijkstra)
思路:单源最短路径->dijkstra 模板原创 2022-06-12 22:15:24 · 244 阅读 · 1 评论 -
leetcode547. 省份数量(中等,求连通分量个数)
类似:leetcode200.岛屿数量(中等)思路一:dfs思路二:bfs思路三:并查集最后通过father[i] == i判断连通分量的个数原创 2022-06-09 20:57:55 · 134 阅读 · 0 评论 -
leetcode1368. 使网格图至少有一条有效路径的最小代价(困难,dijkstra)
思路:dijkstra模板即可时间复杂度O((M+N)logM),其中 N 和 M 分别是图中的点数(nm)和边数 (4n*m)难点:方向怎么判断一致?题目里的1 2 3 4对应(i+1)分别对应右左下上int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; // 遍历到i时得到新位置(xx, yy) ,如果i + 1 == grid[x][y]则表示方向一致class Solution {public: int d....原创 2022-05-29 19:44:31 · 179 阅读 · 0 评论 -
leetcode207.课程表(中等 拓扑排序)
解法:固定的拓扑排序模板 O(顶点数+边数)class Solution {public: bool canFinish(int numCourses, vector<vector<int>>& prerequisites) { //拓扑排序判断是否是有向无环图 vector<int> indegree(numCourses); vector<vector<int>> bian..原创 2021-12-12 22:33:30 · 882 阅读 · 0 评论 -
leetcode210.课程表Ⅱ(中等, 拓扑排序)
思路:典型的拓扑排序模板class Solution {public: vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) { vector<int> indegree(numCourses, 0); //入度数组 vector<int> v[numCourses]; //邻接表存储 ...原创 2021-12-06 13:48:45 · 534 阅读 · 0 评论 -
leetcode5932.合法重新排列数对(困难,周赛,欧拉通路)
典型的有向图求欧拉通路 套模板class Solution {public: unordered_map<int, int> ump; //节点->度数 vector<int> ans1; vector<vector<int>> ans2; unordered_map<int, vector<int>> ump2; //节点->该节点可以到达的节点 void dfs(int ...原创 2021-12-05 22:50:31 · 113 阅读 · 0 评论 -
leetcode332.重新安排行程(困难,欧拉通路)
思路:有向图的欧拉通路模板class Solution {public: unordered_map<string, priority_queue<string, vector<string>, greater<string>>> ump; vector<string> ans; void dfs(string str) { while (ump[str].size()) { ...原创 2021-12-05 22:19:02 · 137 阅读 · 0 评论