这里借助了c++的容器vector来存储每一个结点以及信息
这里我们的稀疏图用邻接表来存储会更好一点
稠密图的话用邻接矩阵来存储会更好一点
稠密图的邻接矩阵的实现
#ifndef DENSEGRAPH_MY_H_
#define DENSEGRAPH_MY_H_
#include<iostream>
#include<vector>
#include<cassert>
using namespace std;
//用邻接表实现存储稠密图
class DenseGraph_my
{
private:
int n,m; //n表示有多少节点 m表示有多少边
bool directed; //写一个可扩展的图,这样可以接受有向图也可以接收无向图
vector< vector<bool> > g; //邻接矩阵存储 ,这里面类型是bool 了不是int哦
public:
DenseGraph_my(int n,bool directed)
{
this->n = n;
this->m = 0;
this->directed = directed;
//要记得初始的时候创建一个矩阵
for(int i = 0; i < n ; i++)
g.push_back( vector<bool> (n,false));
}
~DenseGraph_my()
{
}
int V() {return n;} //返回有多少个顶点
int E() {return m;} //返回有多少个边
//判断两个节点是否有边
bool hasEdge(int v, int w)
{
assert(v >= 0 && v < n);
assert(v >= 0 && v < n);
return g[v][w]; //直接返回这一点的值就行啦
}
//给相应的两个点加上边
void addEdge( int v ,int w)
{
assert(v >= 0 && v < n);
assert(v >= 0 && v < n);
if(hasEdge(v,w))
return ;
g[v][w] = true;
if( !directed)
g[w][v] = true;
m++;
}
void show()
{
for(int i = 0 ; i < n ; i ++)
{
for( int j = 0 ; j < n ; j ++)
cout << g[i][j] << "\t";
cout << endl;
}
}
};
#endif
稀疏图的邻接表的实现
#ifndef SPARSEGRAPH_MY_H_
#define SPARSEGRAPH_MY_H_
//稀疏图用邻接表来存储
//邻接表竟然也是用vector容器来实现的
#include<iostream>
#include<vector>
#include<cassert>
using namespace std;
class SparseGraph_my
{
private:
int n, m ;//n是节点数 m是边数
bool directed; //判断是否是有向图
vector< vector<int> > g; //这里直接存的就是数值了,而不是true和false
public:
SparseGraph_my(int n, bool directed)
{
this->n = n;
this->m = 0;
this->directed = directed;
for(int i = 0 ; i < n ; i++)
g.push_back(vector<int>()); //这里直接就不赋值,每一个都是空的
}
~SparseGraph_my()
{
}
int V(){ return n;}
int E(){ return m;}
bool hasEdge(int v , int w)
{
assert( v >= 0 && v < n);
assert( w >= 0 && w < n);
for(int i = 0 ; i < g[v].size() ; i ++)
if(g[v][i] == w)
return true;
return false;
}
void addEdge(int v ,int w)
{
assert( v >= 0 && v < n);
assert( w >= 0 && w < n);
g[v].push_back(w); //直接在v所在的那一个链表中添加上w的元素
if( v != w && !directed)
g[w].push_back(v);
m++;
}
void show()
{
for(int i = 0 ; i < n ; i++)
{
cout << "vertex " << i << ":\t";
for(int j = 0 ; j < g[i].size(); j++)
cout << g[i][j] << "\t";
cout << endl;
}
}
};
#endif