[leetcode] 题型整理之图论
圖論的常見題目有兩類,一類是求兩點(diǎn)間最短距離,另一類是拓?fù)渑判?#xff0c;兩種寫起來都很煩。
求最短路徑:
127. Word Ladder
Given two words (beginWord?and?endWord), and a dictionary's word list, find the length of shortest transformation sequence from?beginWord?to?endWord, such that:
For example,
Given:
beginWord?=?"hit"
endWord?=?"cog"
wordList?=?["hot","dot","dog","lot","log"]
As one shortest transformation is?"hit" -> "hot" -> "dot" -> "dog" -> "cog",
return its length?5.
Note:
- Return 0 if there is no such transformation sequence.
- All words have the same length.
All words contain only lowercase alphabetic characters.
從起點(diǎn)開始向外更新,因?yàn)槊織l路徑的權(quán)值都不是負(fù)數(shù),所以先更新的總比后更新的小。
已經(jīng)被更新過的之后就不用考慮了
?133. Clone Graph
Clone an undirected graph. Each node in the graph contains a?label?and a list of its?neighbors.
OJ's undirected graph serialization:
Nodes are labeled uniquely.
We use?#?as a separator for each node, and?,?as a separator for node label and each neighbor of the node.?
As an example, consider the serialized graph?{0,1,2#1,2#2,2}.
The graph has a total of three nodes, and therefore contains three parts as separated by?#.
?
Visually, the graph looks like the following:
1/ \/ \0 --- 2/ \\_/?
?
關(guān)鍵要用一個圖把舊的節(jié)點(diǎn)和新的節(jié)點(diǎn)一一對應(yīng)起來,并用一個隊(duì)列存儲需要更新neighbor的節(jié)點(diǎn),每次加入到某一個鏈表中的新節(jié)點(diǎn),只在map中放入neighbor沒有更新的新節(jié)點(diǎn),待從queue中讀到的時候再處理。 261. Graph Valid TreeGiven?n?nodes labeled from?0?to?n - 1?and a list of undirected edges (each edge is a pair of nodes), write a function to check whether these edges make up a valid tree.
For example:
Given?n = 5?and?edges = [[0, 1], [0, 2], [0, 3], [1, 4]], return?true.
Given?n = 5?and?edges = [[0, 1], [1, 2], [2, 3], [1, 3], [1, 4]], return?false.
Hint:
Note: you can assume that no duplicate edges will appear in?edges. Since all edges are undirected,?[0, 1]?is the same as?[1, 0]?and thus will not appear together in?edges.
public class Solution {public boolean validTree(int n, int[][] edges) {List<HashSet<Integer>> sets = new ArrayList<HashSet<Integer>>();for (int i = 0; i < n; i++) {sets.add(new HashSet<Integer>());}boolean[] isVisited = new boolean[n];Arrays.fill(isVisited, false);for (int[] edge : edges) {int v1 = edge[0];int v2 = edge[1];sets.get(v1).add(v2);sets.get(v2).add(v1);}boolean result = dfs(sets, isVisited, 0, -1);if (!result) {return false;}for (int i = 0; i < n; i++) {if (!isVisited[i]) {return false;}}return true;}private boolean dfs(List<HashSet<Integer>> sets, boolean[] isVisited, int now, int prev) {boolean isV = isVisited[now];if (isV) {return false;}isVisited[now] = true;for (Integer x : sets.get(now)) {if (x != prev && !dfs(sets, isVisited, x, now)) {return false;}}return true;} }?
310. Minimum Height Trees
For a undirected graph with tree characteristics, we can choose any node as the root. The result graph is then a rooted tree. Among all possible rooted trees, those with minimum height are called minimum height trees (MHTs). Given such a graph, write a function to find all the MHTs and return a list of their root labels.
Format
The graph contains?n?nodes which are labeled from?0?to?n - 1. You will be given the number?n?and a list of undirected?edges?(each edge is a pair of labels).
You can assume that no duplicate edges will appear in?edges. Since all edges are undirected,?[0, 1]?is the same as?[1, 0]?and thus will not appear together in?edges.
Example 1:
Given?n = 4,?edges = [[1, 0], [1, 2], [1, 3]]
0|1/ \2 3return?[1]
Example 2:
Given?n = 6,?edges = [[0, 3], [1, 3], [2, 3], [4, 3], [5, 4]]
0 1 2\ | /3|4|5return?[3, 4]
Hint:
Note:
(1) According to the?definition of tree on Wikipedia: “a tree is an undirected graph in which any two vertices are connected by?exactly?one path. In other words, any connected graph without simple cycles is a tree.”
(2) The height of a rooted tree is the number of edges on the longest downward path between the root and a leaf.
Credits:
Special thanks to?@dietpepsi?for adding this problem and creating all test cases.
?
轉(zhuǎn)載于:https://www.cnblogs.com/Gryffin/p/6232520.html
總結(jié)
以上是生活随笔為你收集整理的[leetcode] 题型整理之图论的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tag 应用截图
- 下一篇: python中正态分布检验的方法