日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【leetcode】clone-graph

發(fā)布時(shí)間:2025/5/22 编程问答 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【leetcode】clone-graph 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫在前面的話:

  看了看自己的博客,從一月底開始就沒怎么更新過,我也確實(shí)將近5個(gè)月沒怎么寫代碼了。今天突然覺得有些心慌,感覺手都已經(jīng)生疏了。果然,隨便找了道題就卡住了。隱約感覺要用map但又不太記得用法了,知道可以用DFS或BFS卻又理不清思路。費(fèi)了兩個(gè)小時(shí),結(jié)果寫了一個(gè)shit一樣的代碼才通過。唉好憂傷啊。

?

?

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/ \\_/

    ?

    我的解法:

    反應(yīng)了好久,才發(fā)現(xiàn)題目的難點(diǎn)是防止結(jié)點(diǎn)的重復(fù)建立。我的方法沒有用map,很繁瑣。

    #include<iostream> #include<vector> #include<algorithm> #include<stdlib.h> using namespace std;struct UndirectedGraphNode {int label;vector<UndirectedGraphNode *> neighbors;UndirectedGraphNode(int x) : label(x) {};}; class Solution { public:UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {//獲取所有獨(dú)立的結(jié)點(diǎn)vector<UndirectedGraphNode *> UniqueNodes;getUniqueNodes(node, UniqueNodes);return findNode(node, UniqueNodes);}//查找指定結(jié)點(diǎn)并返回UndirectedGraphNode * findNode(UndirectedGraphNode * node, vector<UndirectedGraphNode *> UniqueNodes){if(NULL == node)return NULL;for(int i = 0; i < UniqueNodes.size(); i++){if(node->label == UniqueNodes[i]->label){return UniqueNodes[i];}}return NULL;}//獲取圖中所有的結(jié)點(diǎn)和連接信息void getUniqueNodes(UndirectedGraphNode *node, vector<UndirectedGraphNode *>& UniqueNodes){//結(jié)點(diǎn)空或已存在時(shí)直接返回if(NULL == node || NULL != findNode(node, UniqueNodes))return;//存儲(chǔ)新出現(xiàn)的結(jié)點(diǎn)UndirectedGraphNode * newNode = new UndirectedGraphNode(node->label);UniqueNodes.push_back(newNode);for(int i = 0; i < node->neighbors.size(); i++){getUniqueNodes(node->neighbors[i], UniqueNodes);newNode->neighbors.push_back(findNode(node->neighbors[i], UniqueNodes));}} };int main() {Solution s;UndirectedGraphNode * node0 = new UndirectedGraphNode(0);UndirectedGraphNode * node1 = new UndirectedGraphNode(1);UndirectedGraphNode * node2 = new UndirectedGraphNode(2);node0->neighbors.push_back(node1);node0->neighbors.push_back(node2);node1->neighbors.push_back(node2);node2->neighbors.push_back(node2);UndirectedGraphNode * newNode = s.cloneGraph(node0);return 0; }

    ?

    網(wǎng)上大神解法

    /*** Definition for undirected graph.* struct UndirectedGraphNode {* int label;* vector<UndirectedGraphNode *> neighbors;* UndirectedGraphNode(int x) : label(x) {};* };*/ class Solution { private:unordered_map<UndirectedGraphNode*,UndirectedGraphNode*> hash; public://BFSUndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {if(!node) return NULL;queue<UndirectedGraphNode*> Qu;Qu.push(node);hash[node] = new UndirectedGraphNode(node->label);while(!Qu.empty()){UndirectedGraphNode * tmp = Qu.front();Qu.pop();for(UndirectedGraphNode * neighbor : tmp->neighbors){if(hash.find(neighbor) == hash.end()){hash[neighbor] = new UndirectedGraphNode(neighbor->label);Qu.push(neighbor);}hash[tmp]->neighbors.push_back(hash[neighbor]);}}return hash[node];}//DFSUndirectedGraphNode *cloneGraph1(UndirectedGraphNode *node) {if(!node) return NULL;if(hash.find(node) == hash.end()){hash[node] = new UndirectedGraphNode(node->label);for(UndirectedGraphNode* neighbor : node->neighbors){hash[node]->neighbors.push_back(cloneGraph1(neighbor));}}return hash[node];} };

    ?

    總結(jié)

    以上是生活随笔為你收集整理的【leetcode】clone-graph的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。