链式前向星存图模板

#include <bits/stdc++.h>
#define int long long
const int inf=0x3f3f3f3f;
const int maxn=1e5+10;
typedef struct edge
{
    int to,next;//to为终点编号,next是同起点的上一条边的编号
}edg;
edg e[maxn];//e[]是代表边的结构体,to和next分别为该边的终点的编号和与该边同起点的上一条边的编号
int n,m,s,t,head[maxn],sum;//head[i]表示以i为起点的当前边的编号
using namespace std;

void init()
{
    N=n;
    memset(head,-1,sizeof(head));//head[]初始化:把以每个编号为起点的第一条边的上一条边的编号记为的编号-1(因为没有)
}
/*加边函数表示方法1*/
/*void AddEdge(int u,int v)//加边函数
{
    e[sum]=(edg){v,head[u]};//(edge)表示强制转化为edge(结构体)类型,表示将后面的v,c,head[u]这三个变量强制转化为edge类型后赋值给e[sum]
    head[u]=sum++;//以u为起点的当前边的编号更新为当前边的编号sum
}*/

/*加边函数表示方法2*/
void AddEdge(int u,int v)
{//建立正边:
    e[sum].to=v;
    e[sum].next=head[u];//与当前边同起点的上一条边的编号记为当前以u为起点的当前边的编号
    head[u]=sum++;//以u为起点的当前边的编号更新为当前边的编号sum,因为当前边是以u为起点的
//建立反边:
    e[sum].to=u;
    e[sum].next=head[v];
    head[v]=sum++;
}

signed main()
{
    ios::sync_with_stdio(false);//加速cin,cout
    cin.tie(0);//加速cin,cout
    cin>>n>>m;//n个顶点,m条边
    init();
    while(m--)
    {
        cin>>s>>t>>c>>w;
        AddEdge(s,t);
    }
    return 0;
}
发布了89 篇原创文章 · 获赞 5 · 访问量 6694

猜你喜欢

转载自blog.csdn.net/Mr_Kingk/article/details/97525427