输入m,n,代表无向图中有m个点,n条边,接下来输入n行,每行包含三个数据,分别是这条边的起始点,终止点和权值。输出邻接表。
#include<bits/stdc++.h>
using namespace std;
struct edge{
int end;
int price;
int next;// next 指向下一条(起始点相同)边的下标
}A[1000001];
int n,m;
int head[100005];// head[i] 表示起始点为i,指向的第1条边的下标head[i]
int num;
void add(int x,int y,int z){
// 有序添加到邻接表中
num++;
A[num].end=y;
A[num].price=z;
int k=head[x];
if(y>A[k].end){
A[num].next=head[x];
head[x]=num;
} else{
int m;
while(y<A[k].end){
m=k;
k=A[k].next;
}
A[num].next=k;
A[m].next=num;
}
}
void output(int k){
if(k==0){
return ;
}
output(A[k].next);
printf("->(%d,%d)",A[k].end,A[k].price);
}
int main(){
cin >> n >> m;
int x,y,z;
while(m--){
cin >> x >> y >> z;
add(x,y,z);
add(y,x,z);
}
int k;
for(int i=1;i<=n;i++){
cout << i;
output(head[i]);
cout << "\n";
}
return 0;
}