zoukankan      html  css  js  c++  java
  • 图的表示方式

    一般采用两种方式表示图:邻接矩阵和邻接表

    一、邻接矩阵是表示图的数据结构中最常用也是最简单的一种,对于一个有n个点的图需要一个n*n的矩阵称之为map,假设存在边<vi,vj>并且它的权值为w,则:map[vi][vj]=w;

    邻接矩阵需要初始化,map[vi][vi]=0    map[vi][vj]=INF(无穷大)   (vi !=vj).

    对于邻接矩阵,初始化需要O(n^2)的时间,空间上的开销也是O(n^2)

    邻接矩阵的优点是简单直观,并且可以直接查询点 vi 到 vj 间是否有边。缺点是,遍历效率较低,初始化效率低,大图的开销特别大,对于稀疏图邻接矩阵的空间利用率也不高,大度位置为INF。

    二、邻接表是图的一种链式存储结构,对于G中的每个顶点vi,把所有邻接于vi的顶点vj连成一个单链表,这个单链表称为顶点vi的邻接表。

    邻接表有3种实现方法:动态建表,使用vector 模拟链表实现,和静态建表这里只介绍前两种

    struct EdgeNode{                     //邻接表节点
          int to  ;                             //终点
          int w   ;                            //权值
          EdgeNode * next ;            //指向下一条边的指针
    };
    
    struct VNode{                     //起点表节点
              int from;                    //起点
              EdgeNode  * first;      //  邻接表头指针
    }

    VNode Adjlist[maxn];
        cin>>i>>j>>w;
        EdgeNode  * p=new EdgeNode();
        p->to=j;
        p->w=w;
        p->next=Adjlist[i].first;
       Adjlist[i].first=p;

     2)用vector 实现

    struct EdgeNode{                     //邻接表节点
          int to  ;                             //终点
          int w   ;                            //权值
      
    };
    
    vector<EdgeNode> map[maxn];
    
    
    EdgeNode  e;
    cin>>i>>j>>w;
    e.to=j;
    e.w=w;
    map[i].push_back(e);
  • 相关阅读:
    Photoshop CC 与前端那些事
    gulp入門指南
    谈谈css左右等高的几个方法
    angularjs给Model添加拦截过滤器,路由增加限制,实现用户登录状态判断
    前端自动化工具
    React Router
    Sublime Text 3 常用插件安装
    c++ primer学习指导(13)--1.6书店程序
    c++ primer学习指导(12)--1.5.2初识成员函数
    c++ primer学习指导(11)--1.5.1Sales_item类
  • 原文地址:https://www.cnblogs.com/wintersong/p/5036635.html
Copyright © 2011-2022 走看看