如果没有权值,直接用vector就行,有权值就用这种
例如:
1 4 9
1 2 5
1 3 7
[1].next=0;
[1].to=4;
[1].dis=9;
head[1]=1;
[2].next=1;
[2].to=3;
[2].dis=8;
head[1]=2;
[3].next=2;
[3].to=3;
[3].dis=7;
head[1]=3;
#include<iostream>
#include<map>
#include<queue>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
vector<int> v[120];
struct Edge{
int to,dis,next;//next用来存储i顶点的其他边的编号
}e[1000];
int head[1000];//用来存储i顶点出现的最后一条边的编号
int num;//边的编号
void add(int from,int to,int dis){
e[++num].next=head[from];
e[num].to=to;
e[num].dis=dis;
head[from]=num;//对i顶点的最新出现所在边的编号更新
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y,v;
cin>>x>>y>>v;
add(x,y,v);
}
for(int i=head[源点];i!=0;i=e[i].next) {//注意这里是遍历边的编号,而不是点
.....
}
}