边结点结构体内变量next的作用

各位,我最近编程,遇到一个边结点结构的定义,却看不太懂一些问题。

 #include<cstdio>
int cnt; 
struct Edge{
    int to;     //边的终点 
    int next;
    int w;      //边的权值 
};

void addEdge(int start,int to,int w){
    edge[cnt].w = w;
    edge[cnt].to = to;              //终点 
    edge[cnt].next = head[start];    
    head[start] = cnt++;
} 

int dfs(int u)
{
    for(int i=head[u]; i!=-1; i=edge[i].next){
        v = edge[i].next;
        if(!vis[v]) //内容省略 
    }
}

int main()
{
    cnt = 0;
    int arc_num; 
    int u,v,w;
    for(int i=1;i<=arc_num;i++){
        cin>>u>>v>>w;
        addEdge(u,v,w)
    }   
} 

问题一:结构体内的next是什么意思?

问题二:edge[cnt].next = head[start]; head[start] = cnt++; 这两个语句什么意思?

问题三:for(int i=head[u]; i!=-1; i=edge[i].next)  这又是什么意思?

求大神们解答一下。

建议你先去了解一下再变成中的边是如何标识的,边的具体定义是什么 在来看这个代码估计你就能够明白了
不告诉你是想你自己去了解,学习的更加的透彻