本题使用静态数组存取可能是最方便的
#include <iostream>
#include <algorithm>
using namespace std;
const int N=100010;
int pre[N],nad[N];
struct rec
{
int p;
int node;
int n;
}rec[N];
int main()
{
int start,n,k;
scanf("%d %d %d",&start,&n,&k);
for(int i=0;i<n;i++)
{
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
pre[x]=y;
nad[x]=z;
}
int nodesums=0,x=start;
while(x!=-1)
{
rec[nodesums].p=x;
rec[nodesums].node=pre[x];
rec[nodesums++].n=nad[x];
x=nad[x];
}
for(int i=0;i+k<=nodesums;i+=k) reverse(rec+i,rec+i+k);
int i;
for(i=0;i<nodesums-1;i++)
{
rec[i].n=rec[i+1].p;
printf("%05d %d %05d\n",rec[i].p,rec[i].node,rec[i].n);
}
rec[nodesums-1].n=-1;
printf("%05d %d %d\n",rec[i].p,rec[i].node,rec[i].n);
return 0;
}
段错误是为什么呢