建立一个结构体用来存边的相关信息:边的终点,边的权值,边的起点的上一条边号
建立一个用来存起点的最后一条边号的数组
通过循环倒着遍历每个起点所引领的每条边 来实现存储树 和图的基本操作
手写代码:
#include <iostream>
//链式前向星学习
const int maxn=1005;
using namespace std;
struct Edge{
int to,w,next;//to终点,边权,同起点的上一条便的编号
}edge[maxn];//edge[x] x就是第几条边
int head[maxn];//用来记录每个点最后连的是哪条边
int n,m,cnt;
void init(){
for(int i=0;i<=n;i++){
head[i] = -1;//每个点都还没有边连接
}
cnt=0;//用来记录是第几条边
}
void add_edge(int u,int v,int w){
edge[cnt].to=v;//to记录边的终点
edge[cnt].w=w;//w记录边的权值
edge[cnt].next=head[u];//next记录起点u的目前连的最后一条边是哪条
head[u]=cnt++;//起点u所连的最后一条边的信息更新,同时边号要++;
}
int main()
{
cin>>n>>m;//有n个起点 m条边
int u,v,w;
init();//init--初始化
for(int i=1;i<m+1;i++){
cin>>u>>v>>w;
add_edge(u,v,w);//把起点是u 重点是v 权重是w的边加进来边
}
for(int i=1;i<=n;i++){
cout<<i<<endl;
for(int j=head[i];j!=-1;j=edge[j].next){
cout<<i<<" "<<edge[j].to<<" "<<edge[j].w<<endl;
}
cout<<endl;
}
return 0;
}