zoukankan      html  css  js  c++  java
  • 存图方式---邻接表&邻接矩阵&前向星

    基于vector存图

     1 struct Edge
     2 {
     3     int u, v, w;
     4     Edge(){}
     5     Edge(int u, int v, int w):u(u), v(v), w(w){}
     6 };
     7 vector<Edge>edges;//把每一条边存下来
     8 vector<int>Map[maxn];//G[i]这个vector存的是以i为起点的所有边在edges里面的下标
     9 void init(int n)
    10 {
    11     for(int i = 0; i <= n; i++)Map[i].clear();
    12     edges.clear();
    13 }
    14 void addedge(int u, int v, int w)
    15 {
    16     edges.push_back(Edge(u, v, w));//注意无向图需要存两条边
    17     m = edges.size();
    18     Map[u].push_back(m - 1);
    19 }
    20 void Find(int u)//遍历以u为起点的所有边
    21 {
    22     for(int i = 0; i < Map[u].size(); i++)
    23     {
    24         Edge&e = edges[Map[u][i]];
    25         //使用e就可以遍历以u为起点的所有的边
    26     }
    27 }

    用邻接矩阵的代码比较简单,就不加上来了

    使用链表前向星存图

    https://www.cnblogs.com/ECJTUACM-873284962/p/6905416.html

     1 struct edge
     2 {
     3     int next;//指向下一个节点
     4     int u, v, w;
     5 };
     6 edge a[maxn];
     7 int head[maxn], node;//node记录节点的数目,head[i]记录连接着i的第一条边
     8 void add(int u, int v, int w)
     9 {
    10     a[node].u = u;
    11     a[node].v = v;
    12     a[node].w = w;
    13     a[node].next = head[u];
    14     head[u] = node++;
    15 }
    16 void init()
    17 {
    18     node = 0;
    19     memset(head, -1, sizeof(head));
    20 }
    21 void Find(int u)
    22 {
    23     for(int i = head[u]; i != -1; i = a[i].next)
    24     {
    25         edge& e = a[i];
    26         //e就是连接着u的所有边
    27     }
    28 }
  • 相关阅读:
    Hibernate关联映射
    mysql 外键约束
    巩固JavaSE基础--IDEA完成实战项目
    PHP--选择排序
    PHP--冒泡排序
    vscode调试单个PHP脚本文件
    Vscode下调试基于Homestead环境的Laravel框架
    Python Web开发
    Python之UDP编程
    Python之TCP编程
  • 原文地址:https://www.cnblogs.com/fzl194/p/8729203.html
Copyright © 2011-2022 走看看