首先定义edge,有三个元素:去向的边,距离,和花费金钱等。
然后vector<edge>G[N]定义图
是一个吊桶形状的数据结构
例如输入:
3 2 1 2 5 6 2 3 4 5
1---> | to=2, dis=5, cost=6 |
2---> | to=3, dis=4, cost=5 |
3---> | ^ |
遍历方法:
用迭代器遍历图中每一条边。
vector<edge>::iterator it;
for(it=G[i].begin(); it < G[i].end();it++<span style="font-family: Arial, Helvetica, sans-serif;">)
</span><span style="font-family: Arial, Helvetica, sans-serif;">{
</span><span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;">edge ed = *it;
</span><span style="font-family: Arial, Helvetica, sans-serif;"> cout<<ed.to<<" "<<ed.dis<<" "<<ed.cost<<endl;
</span><span style="font-family: Arial, Helvetica, sans-serif;">}</span>
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
#include<vector>
#include<stack>
#include<stdlib.h>
using namespace std;
int n,m;
struct edge
{
int to;
int dis;
int cost;
};
vector<edge>G[10005];
int main()
{
int fr,to;
int di,co;
while(cin>>n>>m)
{
for(int i = 0; i < m ; i++)
{
scanf("%d%d%d%d",&fr,&to,&di,&co);
edge e;
e.to = to;e.dis=di;e.cost=co;
G[fr].push_back(e);
}
for(int i = 0 ; i < n ; i++)
{
vector<edge>::iterator it;
for(it=G[i].begin(); it < G[i].end();it++)
{
edge ed = *it;
cout<<ed.to<<" "<<ed.dis<<" "<<ed.cost<<endl;
}
}
}
}