zoukankan      html  css  js  c++  java
  • 从图的邻接表表示转换成邻接矩阵表示的算法

    加群获取学习资料QQ群:901381280

    分析:通过将邻接表的边映射到邻接矩阵上为1,没边的则为0

    #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 adjacency_matrix(Graph GM){        //输出邻接矩阵 
    
    	for(int i=1;i<=GM.VertextNum;i++){//定义顶点表结点
    	    ArcNode* B = new ArcNode;
    	    B= GM.VertexNode[i];
    		B = B->next; 
    	    while(B!=nullptr){
    	    	GM.Edge[i][B->adjvex]=1;
    	    	B = B->next;	    	
    		}
    	}
    	for(int i=1;i<=GM.VertextNum;i++){    //打印邻接矩阵 
    		for(int j=1;j<=GM.VertextNum;j++){
    			  cout << GM.Edge[i][j] << " ";
    		}
    		cout << endl;
    	}
    }
    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;
    	}
    	for(int i=1;i<=GM.VertextNum;i++){    //初始化邻接矩阵 为0; 
    		for(int j=1;j<=GM.VertextNum;j++){
    			  GM.Edge[i][j]=0; 
    		}
    	}
    	cout << "输出邻接表"<<endl;	
    	outAdjacency(GM);              //输出邻接表
    	cout << "输出邻接矩阵"<<endl;
    	adjacency_matrix(GM);         //输出邻接矩阵
    	return 0;
    }

    输入:

    4 5
    1 4
    4 3
    1 2
    2 4
    1 3

    输出结果:

    欢迎关注公众号:Python爬虫数据分析挖掘,方便及时阅读最新文章

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

                     

  • 相关阅读:
    任正非用人:砍掉高层手脚、中层屁股、基层脑袋、全身赘肉!
    SourceTree的基本使用
    Spring学习(三)
    Spring学习(二)
    Spring学习(一)
    SpringBoot学习(五)
    SpringBoot学习(四)
    SpringBoot学习(二)
    SpringBoot学习(三)
    SpringBoot学习(一)
  • 原文地址:https://www.cnblogs.com/chenlove/p/14231694.html
Copyright © 2011-2022 走看看