根据G的邻接表生成G的反向邻接表

加群获取学习资料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;
} 

 

上一篇:【力扣分模块联系】DFS与BFS


下一篇:1009 Product of Polynomials (25分)