欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

菊读图的dijkstra

发布时间:2023/12/20 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 菊读图的dijkstra 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

我就凭这个数据结构拿到了深圳的offer。
其中做了点改动,rule_of_five中的四个被我private了,其实delete和private效果相同。为啥呢?想复制一张图哪是这么简单,本身就是一道leetcode中难度的题了,但是不写还不行,所以我就直接把它们干掉了。那移动它怎么办?放心,这又不是C,RVO和引用完全够用了。

class Edge; class Node {public:int name_;int indegree_;int outdegree_;list<Node*>next_node_;list<Edge*>next_edge_;Node(int name):name_(name),indegree_(0),outdegree_(0){} };class Edge{public:int weight_;Node* from_node_;Node* to_node_;Edge(int weight, Node* from_node, Node* to_node):weight_(weight),from_node_(from_node),to_node_(to_node){} };class Graph {public:list<Edge*>edge_;unordered_map<int, Node*>node_;Graph(const vector<vector<int>>& graph_vec){for(auto edge_vec : graph_vec){int from_name = edge_vec[0], to_name = edge_vec[1], weight = edge_vec[2];if(node_.find(from_name)==node_.end())node_.insert(pair<int,Node*>(from_name, new Node(from_name)));if(node_.find(to_name)==node_.end())node_.insert(pair<int,Node*>(to_name, new Node(to_name)));Node *fromNode = node_.find(from_name)->second, *toNode = node_.find(to_name)->second;Edge *edge = new Edge(weight, fromNode, toNode);fromNode->outdegree_++;toNode->indegree_++;fromNode->next_node_.push_back(toNode);fromNode->next_edge_.push_back(edge);edge_.push_back(edge);}}~Graph(){for(auto p_edge : edge_)delete(p_edge);for(auto pair_node : node_)delete(pair_node.second);}private:Graph(const Graph& other)=delete;Graph(const Graph&& other)=delete;Graph& operator=(Graph& other)=delete;Graph& operator=(Graph&& other)=delete; };

总结

以上是生活随笔为你收集整理的菊读图的dijkstra的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。