链式前向星存图模板
作者:互联网
#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;
}
标签:head,int,sum,链式,next,存图,起点,编号,前向星 来源: https://blog.csdn.net/Mr_Kingk/article/details/97525427