图的表示方式

一般采用两种方式表示图:邻接矩阵和邻接表

一、邻接矩阵是表示图的数据结构中最常用也是最简单的一种,对于一个有n个点的图需要一个n*n的矩阵称之为map,假设存在边<vi,vj>并且它的权值为w,则:map[vi][vj]=w;

邻接矩阵需要初始化,map[vi][vi]=0    map[vi][vj]=INF(无穷大)   (vi !=vj).

对于邻接矩阵,初始化需要O(n^2)的时间,空间上的开销也是O(n^2)

邻接矩阵的优点是简单直观,并且可以直接查询点 vi 到 vj 间是否有边。缺点是,遍历效率较低,初始化效率低,大图的开销特别大,对于稀疏图邻接矩阵的空间利用率也不高,大度位置为INF。

二、邻接表是图的一种链式存储结构,对于G中的每个顶点vi,把所有邻接于vi的顶点vj连成一个单链表,这个单链表称为顶点vi的邻接表。

邻接表有3种实现方法:动态建表,使用vector 模拟链表实现,和静态建表这里只介绍前两种

 

struct EdgeNode{                     //邻接表节点
      int to  ;                             //终点
      int w   ;                            //权值
      EdgeNode * next ;            //指向下一条边的指针
};

struct VNode{                     //起点表节点
          int from;                    //起点
          EdgeNode  * first;      //  邻接表头指针
}

VNode Adjlist[maxn];

 

    cin>>i>>j>>w;
    EdgeNode  * p=new EdgeNode();
    p->to=j;
    p->w=w;
    p->next=Adjlist[i].first;
   Adjlist[i].first=p;

 2)用vector 实现

struct EdgeNode{                     //邻接表节点
      int to  ;                             //终点
      int w   ;                            //权值
  
};

vector<EdgeNode> map[maxn];


EdgeNode  e;
cin>>i>>j>>w;
e.to=j;
e.w=w;
map[i].push_back(e);

 

转载于:https://www.cnblogs.com/wintersong/p/5036635.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值