欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

邻接矩阵和邻接表的相互转化

发布时间:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的这篇文章主要介绍了 邻接矩阵和邻接表的相互转化 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
#include <iostream> #define MaxNum 100 using namespace std; //邻接矩阵 typedef struct{int Vex[MaxNum]; //顶点 int edge[MaxNum][MaxNum]; //边 int arcnum,vexnum; //边和顶点个数 }MGraph; //邻接表 typedef struct ArcNode{int adjvex; struct ArcNode *next; }ArcNode; //边结点 typedef struct VNode{int data; //顶点信息 ArcNode *firstarc; //指向的第一条边 }VNode,AdjList[MaxNum]; //邻接链表头节点 typedef struct{AdjList adjlist;int arcnum,vexnum; }ALGraph; //邻接表 //邻接矩阵转邻接表 void TurnToALG(MGraph MG,ALGraph *&ALG) {int i,j;ArcNode *p; for(i=0;i<MG.vexnum;i++)ALG->adjlist[i].firstarc=NULL; //邻接表初始化for(i=0;i<MG.vexnum;i++)for(j=MG.vexnum;j>=0;j--){if(MG.edge[i][j]!=0) //存在边 {p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->next=ALG->adjlist[i].firstarc; //头插法建立链表 ALG->adjlist[i].firstarc=p;}} } //邻接表转邻接矩阵 void TurnToMG(MGraph &MG,ALGraph *ALG) {int i,j;for(i=0;i<ALG->vexnum;i++)for(j=0;j<ALG->vexnum;j++)MG.edge[i][j]=0; //初始化 for(i=0;i<ALG->vexnum;i++){ArcNode *p;p=ALG->adjlist[i].firstarc;while(p!=NULL){j=p->adjvex;MG.edge[i][j]=1;p=p->next;}} }

 

总结

以上是生活随笔为你收集整理的邻接矩阵和邻接表的相互转化的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。