版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr0cheng/article/details/79457345
这里可以分成三类,用三个vector保存。第一类是小于0的;第二类是大于0但是小于k的;第三类是大于k的;但我是直接使用sort排序里面的cmp重写做的(注意使用stable_sort就行了)。
#include<bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
int startAddress,n,k;
struct node{
int address,data;
friend bool operator < (node a,node b){
if(a.data<0 && b.data>=0)return true;
if(a.data>=0 && b.data<0)return false;
if(a.data>=0 && b.data>=0){
if(a.data>k && b.data<=k)return false;
if(a.data<=k && b.data>k)return true;
}
return false;
}
}link[maxn],in[maxn];
int main(){
scanf("%d %d %d",&startAddress,&n,&k);
int u,v,x;
for(int i=0;i<n;++i){
scanf("%d %d %d",&u,&v,&x);
in[u].address=x;//address == next
in[u].data=v;
}
int temp = startAddress,pos=0;
while(temp!=-1){
link[pos].address=temp;
link[pos].data = in[temp].data;
temp = in[temp].address;
++pos;
}
stable_sort(link,link+pos);
for(int i=0;i<pos;++i){
if(i!=pos-1) printf("%05d %d %05d\n",link[i].address,link[i].data,link[i+1].address);
else printf("%05d %d -1",link[i].address,link[i].data);
}
return 0;
}