#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;
}
}
}
邻接矩阵和邻接表的相互转化
猜你喜欢
转载自blog.csdn.net/KK_2018/article/details/111612413
今日推荐
周排行