graph.h
#ifndef GRAPH_H
#define GRAPH_H
#include
using namespace std;
class edge;
class vertex //顶点
{
friend void connect ( vertex& , vertex& , int ); //建立关系
friend void bfs (const vertex& , int ); //广度遍历
friend void bfs ( vertex& , vertex& , int n );
public:
bool operator!=( const vertex& );
vertex *pPre = nullptr; //用于记录路径,指向第一个到达该顶点的顶点。
int ID = 0; //顶点的独一无二的序号,构造时给定。
private:
int in_degree = 0; //入度
int out_degree = 0; //出度
vector incident_edge; //关联边的集合
};
class edge //边
{
friend void connect ( vertex& , vertex& , int );
friend void bfs ( const vertex& , int );
friend void bfs ( vertex& , vertex& , int n );
public:
edge ( vertex& , int );
private:
int weight = 0; //权重
vertex* pNext = nullptr; //指向的顶点
};
#endif
graph.cpp
#include"graph.h"
edge::edge ( vertex& v , int w )
{
weight = w;
pNext = &v;
}
void connect ( vertex& v1 , vertex& v2 , int w )
{
v1.out_degree++;
v2.in_degree++;
edge e ( v2 , w );
v1.incident_edge.push_back ( e );
}
bool vertex::operator!=( const vertex& v)
{
return this->ID != v.ID;
}
main.cpp
#include
#include