首页 > 技术文章 > 图论存图方式小结

noobimp 2019-07-22 14:10 原文

1、邻接矩阵

简单,开一个二维数组,pic[ i ] [ j ] = w 表示标号为 i 的顶点到标号为 j 的顶点有一条权值为 w 的有向边;

初始化:顶点自己到自己距离为0,不存在边设为inf;

 

2、邻接表

邻接表是一种对于每个顶点,用链表来存储以该点为起点的边的数据结构;

由定义知我们不需要再次记录起点,所以一般用一个结构体来记录边的终点和权值信息,初始化直接对每个顶点clear清空就行了;

struct edge { 
  int to, w;
  edge (
int too, int ww) { to = too; w = ww; }
  //写不写构造函数无所谓辣,随便把值赋上就行辣 };
//指向顶点to的权值为w的边

 

然后利用stl里的vector来实现链表的功能;

vector <edge> G[MAXN];

void addedge (int u, int v, int w) {
    G[u].push_back (edge (v, w)); //添加从u到v权值为w的边
}

 

遍历从某点(v)出发的边;

for (int i = 0; i < G[v].size(); i++) {
      edge e = G[v][i];
      //操作……

}

 

3、链式前向

推荐阅读