图的转置
算法性质
返回输入图的转置图
接口设计
template<typename Key, typename Value>
class ReverseGraph
{
public:
typename typedef DataStruct::GraphStruct::Graph<Key, Value> InnerGraph;
ReverseGraph(const InnerGraph& nGraph_);
~ReverseGraph();
InnerGraph Run();
private:
ReverseGraph(const ReverseGraph& nGraph_) = default;
ReverseGraph& operator=(const ReverseGraph& nGraph_) = default;
private:
const InnerGraph& m_nGraph;
};
实现
构造
template<typename Key, typename Value>
ReverseGraph<Key, Value>::ReverseGraph(const InnerGraph& nGraph_)
: m_nGraph(nGraph_)
{
}
析构
template<typename Key, typename Value>
ReverseGraph<Key, Value>::~ReverseGraph()
{
}
算法运行
template<typename Key, typename Value>
typename DataStruct::GraphStruct::Graph<Key, Value> ReverseGraph<Key, Value>::Run()
{
InnerGraph _nGraph;
DataStruct::Array::DynArray<typename InnerGraph::Node*> _arrNodes = m_nGraph.GetNodesArray();
for (int _i = 0; _i < _arrNodes.GetSize(); _i++)
{
_nGraph.AddNode(_arrNodes[_i]->GetPair());
}
DataStruct::Array::DynArray<typename InnerGraph::Edge*> _arrEdges = m_nGraph.GetEdgesArray();
for (int _i = 0; _i < _arrEdges.GetSize(); _i++)
{
_nGraph.AddEdge(_arrEdges[_i]->GetIdentity().Reverse());
}
return _nGraph;
}