感觉这道题主要是输出有点坑,思路还好,就是把小于0,大于k和在中间的数分成三组,然后在接起来
#include <stdio.h>
#include <vector>
using namespace std;
const int maxv=100010;
struct Node{
int addr;
int data;
int next;
}node[maxv];
vector<Node> down,up,middle;
int main(){
int st,n,k;
scanf("%d %d %d",&st,&n,&k);
for(int i=0;i<n;i++){
int addr,data,next;
scanf("%d %d %d",&addr,&data,&next);
node[addr].addr=addr;
node[addr].data=data;
node[addr].next=next;
}
int temp=st;
while(temp!=-1){
if(node[temp].data<0){
down.push_back(node[temp]);
}else if(node[temp].data>k){
up.push_back(node[temp]);
}else{
middle.push_back(node[temp]);
}
temp=node[temp].next;
}
for(int i=0;i<middle.size();i++){
down.push_back(middle[i]);
}
for(int i=0;i<up.size();i++){
down.push_back(up[i]);
}
for(int i=0;i<down.size()-1;i++){
printf("%05d %d %05d\n",down[i].addr,down[i].data,down[i+1].addr);
}
printf("%05d %d -1\n",down[down.size()-1].addr,down[down.size()-1].data);
return 0;
}