邻接矩阵和邻接表的相互转化
生活随笔
收集整理的這篇文章主要介紹了
邻接矩阵和邻接表的相互转化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#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操作极速上手指南