href="http://ounix1xcw.bkt.clouddn.com/github.markdown.css" rel="stylesheet">
这是leetcode的第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 #.
First node is labeled as 0. Connect node 0 to both nodes 1 and 2. Second node is labeled as 1. Connect node 1 to node 2. Third node is labeled as 2. Connect node 2 to node 2 (itself), thus forming a self-cycle. Visually, the graph looks like the following:
1
/ \
/ \
0 --- 2
/ \
\_/
思路 dfs,以及记录哪些被访问了,而且要注意复制的时候用self.nd里的结点
show me the code
# Definition for a undirected graph node # class UndirectedGraphNode: # def __init__(self, x): # self.label = x # self.neighbors = [] class Solution: # @param node, a undirected graph node # @return a undirected graph node def __init__(self): self.nd={} def cloneGraph(self, node): if not node :return None cur = UndirectedGraphNode(node.label) self.nd[cur.label]=cur for i in node.neighbors: if i.label==node.label: cur.neighbors.append(cur) continue if i.label in self.nd: cur.neighbors.append(self.nd[i.label]) else: ret = self.cloneGraph(i) if ret!=None :cur.neighbors.append(ret) return cur

本文解析了LeetCode上的第133题Clone Graph,详细介绍了如何使用深度优先搜索(DFS)来克隆一个无向图,并通过递归实现节点的复制及邻居的连接。
400

被折叠的 条评论
为什么被折叠?



