邻接矩阵&邻接表.c++

本文介绍了邻接矩阵和邻接表两种无向图的存储表示方法,并详细讲解了如何使用C++来实现这两种数据结构,分别用于表示无向图。
摘要由CSDN通过智能技术生成

邻接矩阵

这里写图片描述

存储表示

#define MaxInt 32767
#define MVNum 100
typedef char VerTexType;
typedef int ArcType;
typedef struct{
    VerTexType vexs[MVNum];
    ArcType arcs[MVNum][MVNum];
    int vexnum,arcnum;
    }AMGraph;

采用邻接矩阵创建无向图

Status CreateUDN(AMGraph &G){
    cin>>G.vexnum>>G.arcnum;
    for(i=0;i<G.vexnum;++i)
        cin>>G.vexs[i];
    for(i=0;i<G.vexnum;++i)
      for(j=0;j<G.vexnum;++j)
        G.arcs[i][j]=MaxInt;
    for(k=0;k<G.arcnum;++k){
      cin>>v1>>v2>>w;
      i=LocateVex(G,v1);j=LocateVex(G,v2);
      G.arcs[i][j]=w;
      G.arcs[j][i]=G.arcs[i][j];
      }
     return OK;
}

邻接表

这里写图片描述

存储表示

#define MVNum 100
typedef struct ArcNode{//边结点
  int adjvex;
  struct ArcNode * nextarc;
  }ArcNode;
typedef struct VNode{//顶点信息
  VerTexType data;
  ArcNode *firstarc;
  }VNode,AdjList[MVNum];
typedef struct{//邻接表
  AdjList vertices;
  int vexnum,arcnum;
  }ALGraph;

采用邻接表创建无向图

Status CreateUDG(ALGraph &G){
  cin>>G.vexnum>>G.arcnum;
  for(i=0;i<G.vexnum;++i){
   cin>>G.vertices[i].data;
   G.vertices[i].firstarc=NULL;
   }
  for(k=0;k<G.arcnum;++k){
   cin>>v1>>v2;
   i=LocateVex(G,v1);j=LocateVex(G,v2);
   //确定v1和v2在G中的位置,即顶点在G.vertices中的序号
   p1=new ArcNode;
   p1->adjvex=j;
   p1-nextarc=G.vertices[i].firstarc;G.vertices[i].firstarc=p1;
   //将新结点*p1插入顶点vi的边表头部
   p2=new ArcNode;
   p2->adjvex=i;
   p1-nextarc=G.vertices[j].firstarc;G.vertices[j].firstarc=p2;
   }
   return OK;
 }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值