1.邻接表存图:
用vector即可
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
#define MAXN 1000
vector<int > e[MAXN];//边
vector<int > v[MAXN];//终点
int main()
{
int n;
int a,b,c;
while(~scanf("%d",&n))
{
while(n--)
{
scanf("%d %d %d",&a ,&b ,&c);
e[a].push_back(c);//有向
v[a].push_back(b);
//e[b].push_back(c);
//v[b].push_back(a);//无向
}
for(int j=0 ; j<e[1].size() ; j++)
printf("1->%d %d\n",v[1][j],e[1][j]);
}
return 0;
}
2.链式前向星:
详解见:https://blog.csdn.net/acdreamers/article/details/16902023
#include<bits/stdc++.h>
using namespace std;
#define MAXN 10005
struct Edge{
int next;//同起点的上一条边的位置
int e;//这条边的终点
int w;//边的权值
};
Edge edge[MAXN];
int head[MAXN];//head[i]表示以i为起点的最后一条边的储存位置
int cnt;//cnt从1开始
void add(int u,int v,int w){
edge[cnt].e=v;
edge[cnt].w=w;
edge[cnt].next=head[u];
head[u]=cnt++;
}
int main()
{
int n,m;
int u,v,w;
while(~scanf("%d %d",&n,&m))
{
cnt=1;
memset(head,-1,sizeof(head));//将head初始化
for(int i=0 ; i<n ;i++){
scanf("%d %d %d",&u,&v,&w);
add(u,v,w);
}
if(head[m]==-1) printf("不存在\n");
for(int i=head[m] ; i>0 ; i=edge[i].next)
printf("%d->%d %d\n",m,edge[i].e,edge[i].w);//输出以m为起点的边
}
return 0;
}
/*
7 3
1 2 4
1 3 5
2 4 6
3 5 7
2 6 4
4 5 6
3 2 1
*/