图的构建(邻接表法)

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<stdlib.h>
#include<math.h>
#include<malloc.h>
#include<string.h>
using namespace std;
#define maxvertexnum 20
typedef struct node//邻接的节点
{
       int index;//节点的标识
       node * next;//下一个节点的指针
       int weight;//邻接边的权值
}edgenode;
typedef struct vertexnode//顶点和它的邻接点
{
    int index;//顶点的标识
    edgenode * firstedge;//邻接点的单链表
}vertexnode,adjlist[maxvertexnum];
typedef struct//图
{
     adjlist adj;//顶点数组
     int n;//图的顶点数
     int e;//图的边数
}graph;
void creategraph(graph &g){
     int i,j,k;
     edgenode *p;
     cout<<"输入图的顶点数和边数"<<endl;
     cin>>g.n>>g.e;
     //建立顶点数组
     for(i=1;i<=g.n;i++){
         g.adj[i].index=i;//输入顶点的标识
         g.adj[i].firstedge=NULL;//顶点的邻接点的单链表指向null
     }
     //建立每个顶点的邻接点单链表
     cout<<"输入相邻接的两点"<<endl;
     for(k=1;k<=g.e;k++){

        cin>>i>>j;
        p=(edgenode *)malloc(sizeof(edgenode));
        p->index=j;
        p->next=g.adj[i].firstedge;
        g.adj[i].firstedge=p;
        //如果是无向图
        p=(edgenode *)malloc(sizeof(edgenode));
        p->index=i;
        p->next=g.adj[j].firstedge;
        g.adj[j].firstedge=p;
     }
}
void displaygraph(graph g)//遍历邻接表
{
     for(int i=1;i<=g.n;i++){
        cout<<i;
        edgenode *p;
        p=g.adj[i].firstedge;
        while(p){
           cout<<"->"<<p->index;
           p=p->next;
        }
        cout<<endl;
     }
}
int main ()
{
     graph g;
     creategraph(g);
     displaygraph(g);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值