zoukankan      html  css  js  c++  java
  • 根据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爬虫数据分析挖掘,方便及时阅读最新文章

                                 回复【开源源码】免费获取更多开源项目源码;

                     

  • 相关阅读:
    亚像素
    dmysql 与QT的连接
    opencv中ptr的使用
    对图片对比度和亮度的理解
    opencv中的各种滤波设计
    人脸检测相关介绍
    opencv中相关的矩阵运算
    形态学处理
    阀值化 threshold
    Python深浅拷贝
  • 原文地址:https://www.cnblogs.com/chenlove/p/14231695.html
Copyright © 2011-2022 走看看