邻接矩阵和邻接表的相互转化
生活随笔
收集整理的这篇文章主要介绍了
邻接矩阵和邻接表的相互转化
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
#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;}}
}
总结
以上是生活随笔为你收集整理的邻接矩阵和邻接表的相互转化的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 非递归遍历求二叉排序树的深度
- 下一篇: Gitee操作极速上手指南