zoukankan      html  css  js  c++  java
  • 邻接表来存储一个图

    //用邻接表来存储一个图
    int n, m, i;
    int u[6], v[6], w[6];
    int first[5], next[5];
    scanf("%d%d", &n, &m);
    //初始化first数组下标1~n的值为-1, 表示1~n顶点暂时都没有边
    for(i = 1; i <= n; ++i)
        first[i] = -1;
    for(i = 1; i <= m; ++i)
    {
        scanf("%d %d %d", &u[i], &v[i], &w[i]); //读入每一条边
        //下面两句是关键啦
        next[i] = first[u[i]];
        first[u[i]] = i;
    }
    
    //遍历每个顶点的边
    for(i = 1; i <= n; ++i)
    {
        k = first[i];
        while(k != -1)
        {
            printf("%d %d %d
    ", u[k], v[k], w[k]);
            k = next[k];
        }
    }
    
    /*
    first[i]:以i为起点的边的编号,没有的话设为-1
    next[i]:编号为i的边的前一条边的编号,同样的,没有也设为-1
    (前一条边:与当前边(也就是i)同一个起点的边,只不过是比i早搜到,早储存)
    
    first[i]再储存完之前一直存的是搜到的第一条以i为起点的边的编号,
    but,如果有另一条以i为起点的边,
    则next[另一条以i为起点的边的编号]=第一条以i为起点的边的编号,记录了两次,
    ∴若以i为起点的边>=3(反正就是比较多,不一定>=3),
    则它可以存最后搜到的以i为起点的边的编号
    
    遍历边的时候,其实是取的边的编号
    
    总之,first和next都是记录的边的编号
    */
    

      

  • 相关阅读:
    【Web】Google Chrome 浏览器调试禁用缓存
    js基础(对象)
    js基础
    css
    html
    mybatis(mapper映射文件)
    mybatis(核心配置文件的配置)
    linux三种连接方式
    spring
    mybatis(入门案例)
  • 原文地址:https://www.cnblogs.com/mjn1/p/9905342.html
Copyright © 2011-2022 走看看