数据结构和算法---图

图的邻接矩阵转邻接表

void ALGraph2MGraph(ALGraph AG, MGraph &MG) { // 图邻接表 AG 表示转化为邻接矩阵 MG 表示 
MG.vexnum = AG.vexnum; // 复制顶点数量 
MG.arcnum = AG.arcnum; // 复制弧数量填充邻接矩阵信息 
for(int i=0; i<AG.vexnum; i++) { // 遍历顶点表 
for(ArcNode* p = AG.vertices[i].first; 
p!=NULL; p=p->next) {// 遍历顶点 i 表结点为 头的边链表 
MG.Edge[i][p->adjvex] = 1; // 复制边信息 
}
}
// 填充边表信息 
for(int i=0; i < AG.vexnum; i++) { // 遍历顶点表 
MG.Vex[i] = AG.vertices[i].data; // 复制顶点信息 
} }

图的邻接表转邻接矩阵

图的邻接表转邻接矩阵

void MGraph2ALGraph(MGraph MG, ALGraph& AG) { // 图邻接矩阵 MG 表示转化为邻接表 AG 表示 
AG.vexnum = MG.vexnum; // 复制顶点数量 
AG.arcnum = MG.arcnum; // 复制弧数量填充边表信息 
for(int i=0; i<MG.vexnum; i++) { // 遍历图中任意顶点对 
for(int j=0; j<MG.vexnum; j++) { 
if(MG.Edge[i][j]!=0) { // 如果顶点 i 和顶点 j 之间有⼀条弧 
ArcNode* p = (ArcNode*)malloc(sizeof(ArcNode)); // 开辟⼀个边表结点 
p->adjvex = j; // 初始化弧头信息 
p->next = AG.vertices[i].first; // 头插法插⼊第 i 个顶点边链表后⾯ 
AG.vertices[i].first = p; } } }// 填充边表信息 
for(int i=0; i<MG.vexnum; i++) { // 遍历顶点表 
AG.vertices[i].data = MG.Vex[i]; // 复制顶点信息 
} }

想要获取更多的
可以关注微信公众号“伊斯电子编程”

你可能感兴趣的:(数据结构和算法---图)