码迷,mamicode.com
首页 > 其他好文 > 详细

邻接表存图

时间:2019-03-01 23:28:52      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:通过   add   include   span   for循环   邻接   直接   oid   一起   

邻接表也叫边表,也是OI中常用的存图方法之一,以后所有的图论算法

我都打算用这个写,具体也不难理解。

这种存图方式是用了N(点的个数)个链表将整个图串联起来,串联方式

便是那个first数组。

我们首先定义了一个结构体,结构体一共有三个参数,终点,权值,这个边

的下一条边。

具体操作:每当输入一条边的数据时,我们将这组数据送进加边函数(也可以

直接写在main函数中的for循环里)cnt是边数,是一个给每条边编号的工具

我们存一下第cnt条边的终点权值以及与cnt相关的下一条边,这个串联是通过

起点来串起来的,把同一起点出发的所有边串联起来,具体把first[s]赋给

edge[cnt].next,所以这样next就是上一条边的编号first[s],再把cnt的值

赋给first[s],这样下一条加入的以这个边为起点的边则会指向这条边

如果是加入的第一条以这个点为起点的边那么first[s]此时等于零,把零赋

给next也就意为没有下一条边了。

code:

#include<cstdio>
#include<iostream>

using namespace std;

struct node
{
    int end;
    int len;
    int next;
};
node edge[2333];
int m,n,first[2333],cnt;

void add_edge(int s,int e,int d)
{
    cnt++;
    edge[cnt].end=e;
    edge[cnt].len=d;
    edge[cnt].next=first[s];
    first[s]=cnt;
    return;
}

int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int s,e,d;
        cin>>s>>e>>d;
        add_edge(s,e,d);
        add_edge(e,s,d);
    }
    return 0;
}

 

邻接表存图

标签:通过   add   include   span   for循环   邻接   直接   oid   一起   

原文地址:https://www.cnblogs.com/Hoyoak/p/10459301.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!