• 前向星


    前向星是一种通过存储边信息的方式存储图的数据结构。它的构造方式非常简单,读入每条边的信息,将边存放在数组中,把数组中的边按照起点顺序排序。

    前向星就构造完了。

    由于涉及排序,前向星的构造时间复杂度与排序算法有关,一般情况下时间复杂度为O(mlogm)。空间上,需要两个数组,空间复杂度为O(m+n)。

    前向星的优点可以应对非常多的情况,可以储存重边,但不能直接判断两个顶点之间是否有边,而且排序需要浪费一些时间。

     

    #include <bits/stdc++.h>

    using namespace std;

    typedef long long LL;
    const int maxn = 100005;
    int head[maxn];
    struct node {//存边的结构数据
      int form;
      int to;
      int w;
    }edge[maxn];
    bool cmp(node a, node b) {//比较函数
      if(a.from == b.from && a.to == b.to) return a.w < b.w;
      if(a.from == b.from) return a.to < b.to;
       return a.from < b.from;
    }
    int main() {
      //freopen("in.txt","r",stdin);
      //freopen("out.txt","w",stdout);
      int n, m;
      cin >> n >> m;//读取数据
      for(int i = 0; i < m; i++) cin >> edge[i].form >> edge[i].to >> edge[i].w;
      sort(edge,edge+m,cmp);
      memset(head, -1, sizeof(head));
      head[edge[0].from] = 0;
      for(int i = 1; i < m; i++)
      if(edge[i].from != edge[i-1].from)
        head[edge[i].from] = i;
      for(int i = 1; i <= n; i++) {//遍历
        for(int k = head[i];edge[k].from == i && k < m; k++) {
          cout << edge[k].from << " "<< edge[k].to << " " << edge[k].w << endl;
        }
      }
    return 0;
    }

  • 相关阅读:
    Appuim学习路-Appuim介绍
    mac下将根目录/更改组到普通用户,导致sudo不能用
    shell获取函数的返回值
    grep匹配字符串出现的次数
    python实现测试报告的bug统计
    ios开发者账号、证书相关内容
    java基础三 [深入多态,接口和多态](阅读Head First Java记录)
    java基础二(阅读Head First Java记录)
    mac下搭建appium
    窗口管理器 Openbox 入门指南
  • 原文地址:https://www.cnblogs.com/creativepower/p/6664329.html
Copyright © 2020-2023  润新知