C++语言实现-邻接表

 图的邻接表实现

邻接表是图的一种链式存储结构。主要是应对于邻接矩阵在顶点多边少的时候,浪费空间的问题。它的方法就是声明两个结构。如下图所示:

先来看看伪代码:

typedef char Vertextype;

//表结点结构

struct ArcNode {

    int adjvex;   //某条边指向的那个顶点的位置(一般是数组的下标)。

    ArcNode * nextarc; //指向下一个表结点

    int weight;   //这个只有网图才需要使用。普通的图可以直接忽略

}; 

//头结点

struct Vnode

{

    Vertextype data;  //这个是记录每个顶点的信息(现在一般都不需要怎么使用)

    ArcNode * firstarc; //指向第一条依附在该顶点边的信息(表结点)

};

1、无向图

该无向图中表节点下的数字1、2、3、0对应的是头结点的下标,用此表示每个头结点与其他的哪些节点相连

2、有向图

该有向图中表节点下的数字1、2、3对应的是头结点的下标,用此表示每个头结点与其他的哪些节点具有指向关系

有向图的邻接表代码实现:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
const int max_v=100;

int main()
{
    int v,e;
    int V[max_v];
    cin>>v>>e;///输入顶点和边的个数
    for(int i=0;i<v;i++)
    {
        cin>>V[i];///输入顶点的值
    }
    int x,y;
    vector<int> G[max_v];  //vector的用法:https://blog.csdn.net/hancunai0017/article/details/7032383 
for(int i=0;i<e;i++) { cin>>x>>y; G[x].push_back(y);///节点x的下一个节点是y } for(int i=0;i<v;i++) { cout<<V[i]<<"->"; for(int j=0;j<G[V[i]].size();j++)//此处的G[V[i]].size()的含义参考另一篇关于拓扑排序的博客 { cout<<G[V[i]][j]<<' '; } cout<<endl; } return 0; }

输入:
5 6
0 1 2 3 4
0 1
1 3
2 1
3 0
3 2
4 3
结果显示:
0->1
1->3
2->1
3->0 2
4->3

猜你喜欢

转载自www.cnblogs.com/LJHAHA/p/9960448.html
今日推荐