• 邻接表(图的表示)


    表示图的一种简单的方法是使用一个二维数组,成为邻接矩阵表示法,对于每条边(u,v),我们置A[u][v] = 1,否则,数组元素就是0。如果边有一个权,那么我们可以置A[u][v]等于该权,而使用一个很大或者很小的权作为标记表示不存在的边。邻接矩阵的表示法无论是在理解还是写法上都很简单,但是空间需求为O(|V|^2),如果图的边不是很多,那么这种表示方法的代价就太大。一般的,对于稠密图,我们使用邻接矩阵表示法,而更为通用的则是用邻接表表示,邻接表的空间需求仅为O(|E|+|V|).

    对于每一个点,把与之相邻的点记录下来,如图9-2所示,编号1所对应的2、4、3(顺序不唯一)即为其相邻的点。

    代码实现

    struct Edge{
    	int u,v,w,next;  
    };
    
    int head[MAX];    
    memset(head,-1,sizeof(head));
    for (int i = 0; i < 2*M; i+=2)
    {
        scanf("%d%d%d",&u,&v,&w);
        edge[i].u = u;
        edge[i].v = v;
        edge[i].w = w;
        edge[i].next = head[u];
        head[u] = i;
        edge[i+1].u = v;
        edge[i+1].v = u;
        edge[i+1].w = w;
        edge[i+1].next = head[v];
        head[v] = i+1;
    }
    

    建立结构体,存取点的信息,u为当前点,v为与u相邻的点,w为u,v之间边的权值;
    head[]数组初始化为-1,head[x],x的含义表示的就是点,例如head[1]就是1这个点,head[1]的值则记录下关于1这个点的邻接表的位置,类似于链表的头节点。
    另外,代码中给出的是无向图邻接表的建立。

  • 相关阅读:
    APP测试整理
    Ubuntu18.04搭建测试环境
    Ubuntu18.04完全卸载mysql5.7
    Ubuntu18.04部署禅道系统
    mysql数据库创建用户、赋权、修改用户密码
    Chrome浏览器查看cookie
    APP测试之日志分析
    计算机网络知识之TCP/IP协议簇
    关于博客园cnblogs图片显示模糊失真问题
    Jmeter脚本录制攻略
  • 原文地址:https://www.cnblogs.com/ZhaoxiCheung/p/5700321.html
Copyright © 2020-2023  润新知