#include<bits/stdc++.h> #include<vector> #include<map> using namespace std; struct node { int data; int next; }a[100005]; vector<int>v[3]; int main() { int start,n,k,temp; cin>>start>>n>>k; for(int i=0;i<n;i++) { //cin>>temp; //cin>>a[temp].data>>a[temp].next; scanf("%d",&temp); scanf("%d%d",&a[temp].data,&a[temp].next); }//放入地址 根据地址去找data 和 next int x=start; while(x!=-1) { int data=a[x].data; if(data<0) v[0].push_back(x); else if(data>=0&&data<=k) v[1].push_back(x); else v[2].push_back(x); x=a[x].next; } bool p=0; for(int i=0;i<3;i++) { for(int j=0;j<v[i].size();j++) { if(!p) { printf("%05d %d ",v[i][j],a[v[i][j]].data); p=1; } else { printf("%05d %05d %d ",v[i][j],v[i][j],a[v[i][j]].data); } } } cout<<-1<<endl; }
思路:1.结构体里面存data和next 根据每一个地址去找他的data和next.
2.按照输入顺序将地址分别放在三个数组里面,负数,正数到k,大于k三类
3.输出时直接输出v数组里面的地址和对应的data,不用管next,因为已经排序好了 下一个节点已经改变 不用管