#include<bits/stdc++.h>
using namespace std;
int data[100000],ne[100000];
int main(){
int ss,n,m;
scanf("%d%d%d",&ss,&n,&m);
for(int i=0;i<n;i++){
int _1,_2,_3;
scanf("%d%d%d",&_1,&_2,&_3);
data[_1]=_2;
ne[_1]=_3;
}
vector<int> v;
for(;ss!=-1;ss=ne[ss]){
v.push_back(ss);//一开始存放的就是地址每一个data的地址
}
int q=v.size(); //引参化为整型
for(int i=0;i+m-1<q;i+=m){
reverse(v.begin()+i,v.begin()+i+m);//直接相当于地址互转
}
for(int i=0;i<q;i++){
printf("%05d %d ",v[i],data[v[i]]);
if(i==q-1) printf("-1");
else{
printf("%05d\n",v[i+1]);
}
}
return 0;
}
总结
1.和前面的整块struct存储更简便,struct都是他们的内部相对顺序没有改变,当遇到内部链表改变的情况,不灵活
本题直接分开存储data ,next,同时存储的直接为该data的地址,next只肩负建初表的任务 更加灵活
应用vector的 reverse
英语