zoukankan      html  css  js  c++  java
  • 最短路径算法之五——邻接表

    邻接表

      邻接矩阵来存储图的信息相对于非完全图,会浪费大量的空间,同时在求最短路径的时候也会有多余的计算浪费时间。

      使用邻接表可以节约这些浪费的时间。

      这里介绍的是用数组模拟的邻接表:

      定义begin[MAXN],end[MAXN],dis[MAXN],first[MAXN],next[MAXN]五个数组。

      PS:first[]数组与顶点个数相同,next[]数组与边的个数相同。

      例子描述如下:

        4 5

        1 4 9

        4 3 8

        1 2 5

        2 4 6

        1 3 7

    Step1

     

    1

    2

    3

    4

    5

    begin

     

     

     

     

     

    end

     

     

     

     

     

    dis

     

     

     

     

     

    first

    -1

    -1

    -1

    -1

    -1

    next

     

     

     

     

     

    Step2

     

    1

    2

    3

    4

    5

    begin

    1

     

     

     

     

    end

    4

     

     

     

     

    dis

    9

     

     

     

     

    first

    1

    -1

    -1

    -1

    -1

    next

    -1

     

     

     

     

    Step3

     

    1

    2

    3

    4

    5

    begin

    1

    4

     

     

     

    end

    4

    3

     

     

     

    dis

    9

    8

     

     

     

    first

    1

    -1

    -1

    2

    -1

    next

    -1

    -1

     

     

     

    Step4

     

    1

    2

    3

    4

    5

    begin

    1

    4

    1

     

     

    end

    4

    3

    2

     

     

    dis

    9

    8

    5

     

     

    first

    3

    -1

    -1

    2

    -1

    next

    -1

    -1

    1

     

     

    Step5

     

    1

    2

    3

    4

    5

    begin

    1

    4

    1

    2

     

    end

    4

    3

    2

    4

     

    dis

    9

    8

    5

    6

     

    first

    3

    4

    -1

    2

    -1

    next

    -1

    -1

    1

    -1

     

    Step6

     

    1

    2

    3

    4

    5

    begin

    1

    4

    1

    2

    1

    end

    4

    3

    2

    4

    3

    dis

    9

    8

    5

    6

    7

    first

    5

    4

    -1

    2

    -1

    next

    -1

    -1

    1

    -1

    3

    创建邻接表:

     1 nt n,m,i;
     2 int begin[6],end[6],dis[6];
     3 int first[6],next[6];
     4 scanf("%d %d",&n,&m);
     5 //初始化first数组
     6 for(i=1;i<=n;i++)
     7     first[i]=-1;
     8 for(i=1;i<=m;i++)
     9 {
    10     scanf("%d %d %d",&begin[i],&end[i],&dis[i]);
    11     next[i]=first[begin[i]];
    12     first[begin[i]]=i;
    13 }

    遍历1号顶点所有边:

     

    1 k=first[1];
    2 while(k!=-1)
    3 {
    4     printf("%d %d %d
    ",begin[k],end[k],dis[k]);
    5     k=next[k];
    6 }

     

     部分图片文字摘自于啊哈磊的blog。

     

  • 相关阅读:
    java 调用webService的各种方法
    log4j.properties配置详细
    js的with语句使用方法
    Hibernate 拦截器 Hibernate 监听器
    Axis1.4 WebService
    Servlet
    ROOT android 原理。 基于(zergRush)
    创建固定大小的文件 Linux shell 脚本编写实例
    makefile 自动推导命令
    makefile的变量定义和赋值
  • 原文地址:https://www.cnblogs.com/Enumz/p/3862969.html
Copyright © 2011-2022 走看看