美文网首页java知识整理
邻接表表示图的实例代码

邻接表表示图的实例代码

作者: 小人物灌篮 | 来源:发表于2017-04-04 12:00 被阅读119次
#include<iostream>
#include<malloc.h>

using namespace std;

#define VERTEX_MAX 20

typedef struct edgeNode{
    int Vertex;//顶点序号
    int weight;//权值
    struct edgeNode *next;//指向有边的下一个顶点 
}EdgeNode;

typedef struct{
    EdgeNode* AdjList[VERTEX_MAX];//指向每个顶点的指针 
    int VertexBum,EdgeNum;//图的顶点的数量和边的数量 
    int GraphType;//图的类型:0:有向图 1:无向图 
}ListGraph;

void CreatGraph(ListGraph *G);//生成图的邻接表 
void OutList(ListGraph *G);//输出邻接表 

void CreatGraph(ListGraph *G){
    int i,weight;
    int start,end;
    EdgeNode *s;
    for(int i=1;i<=G->VertexBum;i++)//清空图的顶点 
        G->AdjList[i]=NULL;
    for(int i=1;i<=G->EdgeNum;i++){//输入各边的两个顶点 
        getchar();
        cout<<"第"<<i<<"条边:"; 
        cin>>start>>end>>weight;                //输入边的起点个终点 
        s=(EdgeNode *)malloc(sizeof(EdgeNode));//申请一个保存顶点的内存 
        s->next=G->AdjList[start];              //插入到邻接表中   
        s->Vertex= end;                         //保存终点编号 
        s->weight=weight;                       //保存权值 
        G->AdjList[start]=s;                    //邻接表对应顶点指向该点
        if(G->GraphType==0){                    //若是无向图,再插入到终点的边链中 
            s=(EdgeNode *)malloc(sizeof(EdgeNode)); 
            s->next = G->AdjList[end];
            s->Vertex = start;
            s->weight = weight;
            G->AdjList[end] = s;
        } 
    }
}

void OutList(ListGraph *G){
    int i;
    EdgeNode *s;
    for(int i=1;i<=G->VertexBum;i++){
        cout<<"顶点"<<i;
        s=G->AdjList[i];
        while(s){
            cout<<"->"<<s->Vertex<<"("<<s->weight<<")";
            s = s->next;
        }
        cout<<endl;
    } 
}

int main(){
    ListGraph G;
    cout<<"输入生成图的类型(0:无向图   1:有向图)";
    cin>>G.GraphType;
    cout<<"请输入图的顶点数量个边数量:";
    cin>>G.VertexBum>>G.EdgeNum;
    cout<<"输入构造各边的两个顶点及权值(用空格分隔)"<<endl;
    CreatGraph(&G);
    cout<<"输出图的邻接表";
    OutList(&G);
    getchar();
    
return 0;
}

实例输入:

0
5 6
1 2 2 
1 3 5
1 5 3
2 4 4 
3 5 5 
2 5 2

运行结果截图:

运行截图.png

相关文章

  • 邻接表表示图的实例代码

    实例输入: 运行结果截图:

  • 图和树

    图 图的两种表示方法:邻接表和邻接矩阵,既可以表示有向图,也可以表示无向图 通常使用邻接表表示法,这种方法表示稀疏...

  • 图 - Graph

    基本概念 边(Edge) 顶点(Vertex) 度(Degree) 图的表示邻接矩阵:用来表示稠密图邻接表:表示稀...

  • 2020-10-29-数据结构与算法-12-(图入门)

    1.基本介绍 图的概念:顶点,边,路径,图的表示方式:邻接矩阵 邻接表图的类型:无向图 有向图 带权图 2.代码实...

  • 图的表示-邻接矩阵与邻接表代码实现(2)

    由上篇图--图论基础(1) - 简书可知,邻接表适合表示稀疏图,邻接矩阵适合表示稠密图。 接下来我们用Java来表...

  • 图的表示和存储结构

    图的表示:两种表示方法 邻接矩阵和邻接表 无向图 有向图 图的权 连通图 度 图的存储结构 1、邻接矩阵存储 浪...

  • 图论基础

    图的表示有两种: 邻接矩阵(Adjacency Matrix)和邻接表(Adjacency Lists) 1、邻接...

  • 12.有权图

    有权图 一、有权图的表示 1). 稠密图的实现表示 邻接矩阵中存对应的权值 2). 稀疏图的实现表示 邻接表中要存...

  • 邻接表及其实现

    图的邻接表表示法类似于树的孩子链表表示法。 编辑文件信息 打印邻接表。

  • 第七章 图

    邻接表定义 邻接表求各点入度 邻接表各点出度 DFS与BFS遍历 已知一个无向图G的邻接表存储表示如下,试写出从顶...

网友评论

    本文标题:邻接表表示图的实例代码

    本文链接:https://www.haomeiwen.com/subject/sxbaottx.html