/**********************3stone***************************
Problem: PAT.1052. Linked List Sorting (25)
Author:3stone
Time:2017/3/6
思路:【order:记录点的序号】
1、根据地址遍历链表给order属性赋值,后按order排序
2、再单独对有效结点的值排序
3、注:可能所有数据都无效,这时要输出【0 -1】
***********************3stone***************************/
#include<cstdio>
#include<algorithm>
#define maxSize 100010
using namespace std;
struct P{
int st, data, ed;
int order;
}point[maxSize];
bool cmp1(P a, P b){
return a.order < b.order;
}
bool cmp2(P a, P b){
return a.data < b.data;
}
int main(){
int n, start;
while(scanf("%d%d", &n, &start) != EOF){
for(int i = 0; i < maxSize; i++)
point[i].order = maxSize;
for(int i = 0; i < n; i++){
int ad;
scanf("%d", &ad);
point[ad].st = ad;
scanf("%d%d", &point[ad].data, &point[ad].ed);
}
int num = 0; //遍历链表,记录序号
for(int pre = start; pre != -1; pre = point[pre].ed){
point[pre].order = ++num;
}
sort(point, point + maxSize, cmp1);
sort(point, point + num, cmp2);
if(0 == num){
printf("0 -1\n");
break;
}
printf("%d %05d\n", num, point[0].st);
for(int i = 0; i < num - 1; i++){
printf("%05d %d %05d\n", point[i].st, point[i].data, point[i+1].st);
}
printf("%05d %d -1\n", point[num-1].st, point[num-1].data);
}//while
return 0;
}
链表应用--PAT.1052. Linked List Sorting
最新推荐文章于 2022-08-02 10:49:22 发布