zoukankan      html  css  js  c++  java
  • leetcode Clone Graph

    题目连接

    https://leetcode.com/problems/clone-graph/  

    Clone Graph

    Description

    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
         / 
         \_/
    /**
     * Definition for undirected graph.
     * struct UndirectedGraphNode {
     *     int label;
     *     vector<UndirectedGraphNode *> neighbors;
     *     UndirectedGraphNode(int x) : label(x) {};
     * };
     */
    class Solution {
    private:
        typedef UndirectedGraphNode Node;
    public:
        Node *cloneGraph(Node* node) {
            if(!node) return NULL;
            queue<Node*> q; q.push(node);
            unordered_map<Node*, Node*> vis;
            Node* head = new Node(node->label);
            vis[node] = head;
            while(!q.empty()) {
                Node* cur = q.front(); q.pop();
                vector<Node*> ret = cur->neighbors;
                for(auto &r: ret) {
                    if(vis.find(r) == vis.end()) {
                        Node* tmp = new Node(r->label);
                        vis[cur]->neighbors.push_back(tmp);
                        vis[r] = tmp;
                        q.push(r);
                    } else {
                        vis[cur]->neighbors.push_back(vis[r]);
                    }
                }
            }
            return head;
        }
    };
  • 相关阅读:
    SpringMVC是什么?
    SpringMVC工作原理
    SQL给字段加上统一的某个字符
    把数据库里的标签去掉
    Windows通过DOS命令进入MYSQL的方法
    mysql添加字段
    sqlserver查询最接近的记录
    LIST 排序
    Tsk4.5异步
    认识和使用Task
  • 原文地址:https://www.cnblogs.com/GadyPu/p/5034055.html
Copyright © 2011-2022 走看看