图的邻接表表示法

匿名 (未验证) 提交于 2019-12-02 23:43:01
#include<iostream>  using namespace std;  #define MAX_VERTEX_NUM 50  typedef char VertexData;  //定义弧结点 typedef struct EdgeNode {   int adjvex;    //该弧指向顶点的位置   VertexData data;   EdgeNode *next; }EdgeNode;  //定义表头结点 typedef struct VetexNode {   VertexData data;   EdgeNode *link; }VetexNode;   //定义基于邻接表的图 typedef struct AdjList {   int vexNun,arcNun; //定义邻接表的顶点数,弧数   VetexNode vertex[MAX_VERTEX_NUM]; }AdjList;  //创建图,包含表头结点的初始化,及表头结点所指向的边链表  void CreateGraph(AdjList *adj,int *n) {   int e,s,d;        // 定义图的边数, s为边的起始位置(即表头结点序号)d为目的位置(即边链表结点序号)   cout<<"输入顶点数(n)和边数(e)\n";   cin>>*n>>e;   adj->arcNun=*n;   adj->vexNun=e;   EdgeNode *q=NULL;   //初始化n个表头结点   for(int i=1;i<=*n;i++)   {      cout<<"输入第"<<i<<"个结点的信息\n";      cin>>adj->vertex[i].data;      adj->vertex[i].link=NULL;   }   for(i=1;i<=e;i++)   {     cout<<"请输入边的起始与目的位置\n";     cin>>s>>d;     cout<<"请输入目的结点的信息\n";     q=(EdgeNode *)malloc(sizeof(EdgeNode));     if(q==NULL) return;     q->adjvex=d;     cin>>q->data;     q->next=adj->vertex[s].link;     adj->vertex[s].link=q;   } }  //打印图的各个边 void DispGraph(AdjList *adj) {     int n=adj->arcNun;   cout<<"所有的边为:\n";   EdgeNode *q=NULL;   for(int i=1;i<=n;i++)   {     q=adj->vertex[i].link;     if(q==NULL)     {       cout<<"没有从"<<adj->vertex[i].data<<"出发的结点\n";     }     else     {        cout<<"从结点"<<adj->vertex[i].data<<"出发的"<<"边是\n";        while(q!=NULL)        {           cout<<adj->vertex[i].data<<"->"<<q->data<<"\n";           q=q->next;         }      }   } }  int main() {   int n;   AdjList * adj=(AdjList *)malloc(sizeof(AdjList));   CreateGraph(adj,&n);   DispGraph(adj);   return 0; }

转载于:https://my.oschina.net/u/1167421/blog/546484

文章来源: https://blog.csdn.net/weixin_34228387/article/details/92080842
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!