【加群获取学习资料QQ群:901381280】
思路:创建一个图graph结果,将存储边的数组进行遍历可以输出邻接表,将邻接表反向输出则是反向邻接表
#include<iostream>
using namespace std;
#define MaxNum 20 //图的最大顶点数
#define MaxValue 65535 //最大值
typedef struct
{
int VertextNum; //顶点数量
int EdgeNum; //边的数量
int Edge[MaxNum][MaxNum]; //存储边
}Graph;
void initGraph(Graph GM){ //初始化GM.Edge全为0
int i,j;
for(i=0;i<GM.VertextNum;i++)
{
for(j=0;j<GM.VertextNum;j++)
{
GM.Edge[i][j]=MaxValue; //使矩阵中的元素都为MaxValue
}
}
}
void outAdjacency(Graph GM){ //输出邻接表
cout << "输出邻接表"<<endl;
for(int i=1;i<=GM.VertextNum;i++){
cout << i;
for(int j=1;j<=GM.VertextNum;j++){
if(GM.Edge[i][j]==1){
cout << "->" << j;
}
}
cout << "->Null"<<endl;
}
}
void outInverse_Adjacency(Graph GM){ //输出反向邻接表
cout << "输出反向邻接表"<<endl;
for(int i=1;i<=GM.VertextNum;i++){
cout << i;
for(int j=1;j<=GM.VertextNum;j++){
if(GM.Edge[j][i]==1){
cout << "->" << j;
}
}
cout << "->Null"<<endl;
}
}
int main(){
Graph GM; //初始化图
cin>>GM.VertextNum; //输入顶点数量
cin>>GM.EdgeNum; //入边的数量
initGraph(GM); //GM.Edge全为0
for(int i=0;i<GM.EdgeNum;i++){
int j,k;
cin >>j >>k ;
GM.Edge[j][k]=1; //1表示j->k有边
}
outAdjacency(GM); //输出邻接表
outInverse_Adjacency(GM); //输出反向邻接表
return 0;
}