#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn=100010;
struct nod
{
int address;
int data;
int next;
int at;
}node[maxn];
int start,n,k;
int cmp(nod a,nod b)
{
return a.at<b.at;
}
void reverse(int a,int b)
{
int i=a;
int j=b;
nod tmp;
while(i<=j)
{
tmp=node[i];
node[i]=node[j];
node[j]=tmp;
i++;
j--;
}
}
int main()
{
int tmp;
//freopen("in.txt","r",stdin);
scanf("%d%d%d",&start,&n,&k);
for(int i=0;i<n;i++)
{
scanf("%d",&tmp);
scanf("%d%d",&node[tmp].data,&node[tmp].next);
node[tmp].address=tmp;
}
for(int i=0;i<maxn;i++)
node[i].at=maxn+10;
tmp=start;
int count=0;
while(tmp!=-1)
{
node[tmp].at=count;
count++;
tmp=node[tmp].next;
}
sort(node,node+maxn,cmp);
//printf("%d\n",node[0].data);
int i=0;
while(i<count)
{
if(i+k-1<count)
reverse(i,i+k-1);
i+=k;
}
for(int i=0;i<count;i++)
{
if(i<count-1)
node[i].next=node[i+1].address;
else
node[i].next=-1;
}
for(int i=0;i<count;i++)
{
if(i<count-1)
printf("%05d %d %05d\n",node[i].address,node[i].data,node[i].next);
else
printf("%05d %d -1\n",node[i].address,node[i].data);
}
return 0;
}
PAT1074(静态链表)
最新推荐文章于 2020-07-08 21:07:04 发布