📄 igraph.h
字号:
#ifndef _IGRAPH_H
#define _IGRAPH_H
#include <map>
#include <vector>
#include <set>
using namespace std;
namespace NM_PSNTP
{
typedef unsigned int VertexNo_T;
typedef unsigned int BranchNo_T;
typedef int BranchName_T;
typedef unsigned int EndDevNo_T;
typedef int IslandNo_T;
typedef int SectionNo_T;
class INumberGraph
{
//用顺序序号表示顶点和边的有环无向图接口类,将用于电力系统拓扑分析类
private:
public:
virtual int SetGraph(const int, const vector<pair<VertexNo_T, VertexNo_T> > &, const vector<VertexNo_T> & = vector<VertexNo_T>()) = 0;
//设置图,参数依次为:顶点数目,边信息,单端设备信息。返回值暂时无定义
virtual int GetConnections(vector<BranchNo_T>&, vector<EndDevNo_T>&, const VertexNo_T) = 0;
//查找一个顶点上所连的边和单端设备。返回值暂时无定义
virtual int GetConnections(vector<BranchNo_T>&, vector<EndDevNo_T>&, const vector<VertexNo_T>&) = 0;
//查找一组顶点上所连的边和单端设备。返回值暂时无定义。
virtual void IslandAnalyse(IslandNo_T &island_num, vector<IslandNo_T> &, vector<bool> &, const vector<BranchNo_T> &,bool search_flag = false,const vector<BranchName_T> &branch_name_vec=vector<BranchName_T>(),const vector<VertexNo_T> & = vector<VertexNo_T>()) = 0;
//岛分析,参数依次为:岛数目,各顶点的岛号,树枝标志,移去的边
virtual void Split(SectionNo_T §ion_num, vector<SectionNo_T> &, const vector<VertexNo_T> &, const vector<BranchNo_T> &) = 0;
//将图分块,参数依次为:分块数目,各边的块号,指定的分块边界(顶点),移去的边
virtual bool SearchPath(vector<VertexNo_T> &, vector<BranchNo_T> &, const VertexNo_T, const VertexNo_T, const vector<BranchNo_T> &) = 0;
//寻找路径,参数依次为:经历的顶点,经历的边,起始顶点,中止顶点, 移去的边。返回值表示是否搜索到连通路径。
virtual bool SearchSpecialDevType(const VertexNo_T vertex_no,set<int> dev_type,vector<BranchName_T> &dev_vec,vector<EndDevNo_T> & term_vec,vector<BranchName_T>,const set<int> &stop_dev_type =set<int>(),const set<VertexNo_T> &bs_node_set = set<VertexNo_T>(),const BranchNo_T branch_no = -1,const vector<BranchNo_T> &open_branch_vec = vector<BranchNo_T>(),bool isReadEndDev = false) = 0;
//寻找节点连接的指定设备
virtual ~INumberGraph() {};
};
INumberGraph *GetNumberGraph();
typedef int VertexName_T;
typedef int EndDevName_T;
struct NamedBranch_T
{
BranchName_T m_bch_id;
VertexName_T m_vtx1_id;
VertexName_T m_vtx2_id;
};
class INameGraph
{
private:
public:
#ifdef _LINUX
virtual int SetGraph(const vector<VertexName_T>&,const vector<BranchName_T>&,const vector<pair<VertexName_T, VertexName_T> >&,const vector<pair<EndDevName_T,VertexName_T> > &) = 0;
#else
virtual int SetGraph(const vector<VertexName_T>&,const vector<BranchName_T>&,const vector<pair<VertexName_T, VertexName_T> >&,const vector<pair<EndDevName_T, VertexName_T> > & = vector<pair<EndDevName_T, VertexName_T> >()) = 0;
#endif
virtual int GetConnections(vector<BranchName_T>&, vector<EndDevName_T>&, const VertexName_T) = 0;
virtual int GetConnections(vector<BranchName_T>&, vector<EndDevName_T>&, const vector<VertexName_T>&) = 0;
virtual void IslandAnalyse(IslandNo_T &island_num, map<VertexName_T, IslandNo_T> & , vector<BranchName_T> &, const vector<BranchName_T> &,bool search_flag = false,const vector<VertexName_T> & = vector<VertexName_T>()) = 0;
virtual void Split(SectionNo_T §ion_num, map<BranchName_T, SectionNo_T> &, const vector<VertexName_T> &, const vector<BranchName_T> &) = 0;
virtual bool SearchPath(vector<VertexName_T> &, vector<BranchName_T> &, const VertexName_T, const VertexName_T, const vector<BranchName_T> &) = 0;
virtual bool SearchSpecialDevType(const VertexName_T vertex_name,set<int> dev_type,vector<BranchName_T> &dev_vec,vector<EndDevName_T> & term_vec,const set<int> &stop_dev_type =set<int>(),const set<int> &bs_node_set = set<int>(),const BranchName_T branch_name = -1,const vector<BranchName_T> &open_branch_vec = vector<BranchName_T>(),bool isReadEndDev = false) = 0;
virtual ~INameGraph() {};
};
INameGraph *GetNameGraph();
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -