这一题其实不难,先用结构体数组存放结点数据,然后再沿地址链将链上数据放入向量进行排序。但是因为两个小问题卡了很久。
一是在第三个case中,忘记了将首地址用%05d输出。
二是题中说N是一个正整数,但实际最后一个case N=0,所有要特殊处理。
另外,不必node n=L[ad];
ForSort.push_back(n);
可以直接ForSort.push_back(L[ad]);
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct node{
int ad;
int v;
int next;
}L[100001];
vector<node> ForSort;
bool cmp(node n1,node n2){
return n1.v<n2.v;
}
int main(){
int N,ad;
int i,tempad;
cin>>N>>ad;
for(i=0;i<N;i++){
cin>>tempad;
L[tempad].ad=tempad;
cin>>L[tempad].v>>L[tempad].next;
}
for(;ad!=-1;ad=L[ad].next){
node n=L[ad];
ForSort.push_back(n);
}
sort(ForSort.begin(),ForSort.end(),cmp);
if(ForSort.size() == 0) {
cout << "0 -1";
return 0;
}
else{
printf("%d %05d\n", ForSort.size(), ForSort[0].ad);
for(i=0;i<ForSort.size();i++){
if(i!=ForSort.size()-1)
printf("%05d %d %05d\n",ForSort[i].ad,ForSort[i].v,ForSort[i+1].ad);
else
printf("%05d %d -1\n",ForSort[i].ad,ForSort[i].v);
}
}
system("pause");
return 0;
}