图的存储

                         图结构在计算机中一般用邻接矩阵或者邻接表来存储。

                                              图结构可分为 ‘顶点’ 和 ‘点与点之间的连线’ 两部分。

图的邻接矩阵存储结构:

typedef struct
{
    int  vexs[MaxVex];   //顶点数组
    int  arc[MaxVex][MaxVex];   //邻接矩阵
    int  numVertexes, numEdges;  //顶点数和边数
}MGraph; 

图的构建(数据的输入):

void CreateMGraph(MGraph *G)
{
    cin>>G->numVertexes>>G->numEdges;
    for (i=0;i<G->numVertexes;i++)
         cin>>vexs[i];             //输入顶点表
    for (i=0;i<G->numVertexes;i++)
      for (j=0;j<G->numVertexes;j++)
          cin>>G->numEdges[i][j]   //输入(i->j)边上的权重,用权重无限大代表无路。

}

图的邻接表存储:

typedef struct EdgeNode      //边结构
{
    int adjvex;              //顶点在定点表中的下标
    int weight;              //权重
    struct EdgeNode* next;   //指向下一个邻接顶点的指针

}EdgeNode;

typedef struct VertexNode    //顶点表结构
{
    int data;
    EdgeNode* firstedge;     //firstedge指针指向第一个邻接结点

}VertexNode,AdjList[MAXVEX]

typedef struct               //图结构
{
    AdjList adjList;           //顶点列表
    int numVertexes,numEdges;  //顶点数、边数

}GraphAdjList;

图的构建(数据的输入):

void CreateGraph(GraphAdjList *G)
{
    cin>>G->numVertexes>>G->numEdges;  //输入图的顶点数和边条数

    for (i=0;i<G->numVertexes;i++)   //创建顶点表
    {
        cin>>G->adjList[i].data;
        G->firstedge=NULL;
    }

    for (i=0;i<G->numEdges;i++)   //创建边表
    {
        cin>>i>>j>>w;  //从(i->j)路径上的权重w
        EdgeNode *e=new EdgeNode;  //创建一个新的点结点
        e->weight=w;
        e->next=G->adjList[i].firstedge;  //利用头插法,创建边表
        G->adjList[i].firstedge=e;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值