简单的结构体排序,需注意的是:
若开始的输入地址为-1,则输出应为0 -1。
可采用map<int,node> 来将地址与结点做映射。
AC代码:
#include<iostream>
#include<vector>
#include<map>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<list>
#include<set>
#include<stack>
#include<cmath>
#define inf 26*26*26*10+5
using namespace std;
struct node
{
int id;
int data;
int next;
};
vector<node> v;
bool cmp(node x,node y)
{
return x.data<y.data;
}
map<int,node> mm;
int main()
{
int n;
cin>>n;
int sta;
cin>>sta;
for(int i=0;i<n;i++)
{
node tmp;
cin>>tmp.id>>tmp.data>>tmp.next;
mm[tmp.id]=tmp;
}
while(sta!=-1)
{
v.push_back(mm[sta]);
sta=mm[sta].next;
}
if(v.empty())
{
cout<<0<<" -1";
return 0;
}
sort(v.begin(),v.end(),cmp);
printf("%d %05d\n",v.size(),v[0].id);
for(int i=0;i<v.size();i++)
{
if(i==v.size()-1)
{
printf("%05d %d -1\n",v[i].id,v[i].data);
}
else
{
printf("%05d %d %05d\n",v[i].id,v[i].data,v[i+1].id);
}
}
}