根据G的邻接表生成G的反向邻接表
【加群获取学习资料QQ群:901381280】
分析:输入顶点和边,构建邻接表,然后对邻接表进行反向输出。
#include<iostream>
using namespace std;
#define MaxNum 20 //图的最大顶点数
#define MaxValue 65535 //最大值
// 定义边表结点
struct ArcNode
{
int adjvex; // 邻接点域
ArcNode* next; //下一个邻接点
};
struct Graph
{
struct ArcNode* VertexNode[MaxNum]; //定义顶点表结点
int VertextNum; //顶点数量
int EdgeNum; //边的数量
//int Edge[MaxNum][MaxNum]; //存储边
};
void outAdjacency(Graph GM){ //输出邻接表
for(int i=1;i<=GM.VertextNum;i++){//定义顶点表结点
ArcNode* B = new ArcNode;
B= GM.VertexNode[i];
cout << B->adjvex;
B = B->next;
while(B!=nullptr){
cout << "->"<<B->adjvex;
B = B->next;
}
cout << "->Null"<<endl;
}
}
void Inverse_Adjacency(Graph GM){ //输出反向邻接表
Graph Inverse_GM; //初始化图
Inverse_GM.VertextNum = GM.VertextNum;//输入顶点数量
Inverse_GM.EdgeNum = GM.EdgeNum; //入边的数量
for(int i=1;i<=Inverse_GM.VertextNum;i++){//定义顶点表结点
ArcNode* A = new ArcNode;
A->adjvex=i;
A->next=nullptr;
Inverse_GM.VertexNode[i]=A;
}
for(int i=1;i<=GM.VertextNum;i++){//定义顶点表结点
ArcNode* B = new ArcNode;
B= GM.VertexNode[i];
B = B->next;
while(B!=nullptr){
ArcNode* A = new ArcNode;
A->adjvex=i;
A->next=Inverse_GM.VertexNode[B->adjvex]->next;
Inverse_GM.VertexNode[B->adjvex]->next = A;
B = B->next;
}
}
cout << "输出反向邻接表"<<endl;
outAdjacency(Inverse_GM);
}
int main(){
Graph GM; //初始化图
cin>>GM.VertextNum; //输入顶点数量
cin>>GM.EdgeNum; //入边的数量
for(int i=1;i<=GM.VertextNum;i++){//定义顶点表结点
ArcNode* A = new ArcNode;
A->adjvex=i;
A->next=nullptr;
GM.VertexNode[i]=A;
}
for(int i=1;i<=GM.EdgeNum;i++){
int j,k;
cin >>j >>k ;
ArcNode* A = new ArcNode;
A->adjvex=k;
A->next=GM.VertexNode[j]->next;
GM.VertexNode[j]->next = A;
}
cout << "输出邻接表"<<endl;
outAdjacency(GM); //输出邻接表
Inverse_Adjacency(GM); //反向邻接表
return 0;
}
输入:
4 5
1 4
4 3
1 2
2 4
1 3
运行结果:
欢迎关注公众号:Python爬虫数据分析挖掘,方便及时阅读最新文章
回复【开源源码】免费获取更多开源项目源码;
耐得住寂寞,才能登得顶
Gitee码云:https://gitee.com/lyc96/projects