克隆一个图

克隆一个图结构。

1 struct Node{
2     vector<Node*> neighbors;
3 };

代码如下:

 1 typedef unordered_map<Node*, Node*> Map;
 2
 3 Node* cloneGraph(Node* graph)
 4 {
 5     if (!graph)
 6         return NULL;
 7
 8     Map map;
 9     Node* graphCopy = new Node();
10     map[graph] = graphCopy;
11
12     queue<Node*> q;
13     q.push(graph);
14     while (!q.empty()) {
15         Node* node = q.front();
16         q.pop();
17         int n = node->neighbors.size();
18         for (int i = 0; i < n; i++) {
19             Node* neighbor = node->neighbors[i];
20             if (map.find(neighbor) == map.end()) {
21                 Node* copy = new Node();
22                 map[neighbor] = copy;
23                 map[node]->neighbors.push_back(copy);
24                 q.push(neighbor);
25             } else {
26                 map[node]->neighbors.push_back(map[neighbor]);
27             }
28         }
29         return graphCopy;
30 }
时间: 2024-10-05 04:58:38

克隆一个图的相关文章

以JPanel为基础实现一个图相框

代码: import java.awt.Graphics; import javax.swing.ImageIcon; import javax.swing.JPanel; public class Picture extends JPanel { private static final long serialVersionUID = -4437881316229152596L; private ImageIcon icon; public Picture(java.net.URL imgUR

(转)判断一个图是否有环 无向图 有向图

无向图: 法1: 如果存在回路,则必存在一个子图,是一个环路.环路中所有顶点的度>=2. n算法: 第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度减一. 第二步:将度数变为1的顶点排入队列,并从该队列中取出一个顶点重复步骤一. 如果最后还有未删除顶点,则存在环,否则没有环. n算法分析: 由于有m条边,n个顶点.如果m>=n,则根据图论知识可直接判断存在环路. (证明:如果没有环路,则该图必然是k棵树 k>=1.根据树的性质,边的数目m = n-k.k

[jQuery编程挑战]003 克隆一个页面元素及其相关事件

挑战: a) 绑定一个点击方法到这个div,点击后此元素会淡出消失 b) 同时克隆一个新的div元素到页面,元素内容是前面div文字内容反向书写(即,sgatbg olleh),同样也具有上面的点击事件绑定,元素淡出消失 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="utf-8"/> <title>克隆一个页面元素及其相关元素</titl

poj Transferring Sylla(如何快速的判断一个图是否是3—连通图,求割点,割边)

Transferring Sylla 首先,什么是k连通图?k连通图就是指至少去掉k个点使之不连通的图. 题目: 题目描述的很裸,就是给你一张图要求你判断这图是否是3-连通图. 算法分析: ///////////////////////////////////////////////////////////////////// (网上别人的分析,分析的很好所以直接引用了) 考虑一下不可行的情况,就是存在两点间的路径条数<3情况,那么我们可以去枚举两个点a和b,然后将其和相邻的边删除,然后判断联通

并查集(判断一个图有几个连通块)

import java.util.Scanner; // 并查集 判断一个图中有几个联通块 public class UnionFind { private int[] father;// private int count;// 分量数量 public UnionFind(int N){ count=N; father=new int[N]; for(int i=0;i<N;i++){ father[i]=i; } } public int count() { return count; }

科学家克隆一个全智贤,你要不要娶回家

今天看新闻,说女神全智贤怀二胎了,心里满满的祝福,甚至有些羡慕,什么时候能娶到这样的女子呢?且慢,还是细细的研究一番再下定论.家境富裕,姊妹两个,有个比自己大五岁的哥哥,父亲经常出国出差,妈妈每天上班工作很忙,经常是哥哥照顾她.调皮捣蛋希望引起父母的关注.小时候并不是一个乖乖女,经常是调皮捣蛋和男孩子打架.科学家克隆一个全智贤,你要不要娶回家

判断一个图是否有环 无向图 有向图(转)

没有找到原文出处,请参考一下链接: http://www.cnblogs.com/hiside/archive/2010/12/01/1893878.html http://topic.csdn.net/u/20071023/11/3edb81fc-37b2-4506-906e-44dc0fc521f2.html 一.无向图: 方法1: 如果存在回路,则必存在一个子图,是一个环路.环路中所有顶点的度>=2. n算法: 第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度

判欧拉回路或求一个图中欧拉图的个数

判欧拉图两个条件首先联通,其次度全部为欧度.那么就很easy了. 题目:hdoj1878 求一个图中欧拉图的个数. 首先通过连通性求出各个子图,然后求子图中奇数度的个数cnt,cnt/2为欧拉图的个数.若子图没有奇数度,则为一个欧拉回路. 题目:hdoj3018Ant Trip 注意这个题目中可能出现孤立点,不算入欧拉图中. AC代码: include include include include include include include include include include

Lua自己实现深度克隆一个值

深度克隆一个值 ~~~ lua -- 下面的代码,t2 是 t1 的引用,修改 t2 的属性时,t1 的内容也会发生变化 local t1 = {a = 1, b = 2} local t2 = t1 t2.b = 3    -- t1 = {a = 1, b = 3} <-- t1.b 发生变化 -- clone() 返回 t1 的副本,修改 t2 不会影响 t1 local t1 = {a = 1, b = 2} local t2 = clone(t1) t2.b = 3    -- t1