原题
思路
很简单,遍历一遍,开出3个vector,按题意分类放进去,最后汇总在一个vector里即可。
测试点4 小坑
注意!有废数据!不能以n作为长度判断依据。
正确的做法是用next=-1
或者vector的size()
判断结束。
代码
#include <iostream>
#include <vector>
using namespace std;
struct node{
int add,data,next;
void print(){
if(next!=-1) printf("%05d %d %05d\n",add,data,next);
else printf("%05d %d %d\n",add,data,next);
}
}a[999999];
int main() {
int start,n,k;
cin>>start>>n>>k;
for(int i=0;i<n;i++){ //存入数据
node t;
cin>>t.add>>t.data>>t.next;
a[t.add]=t;
}
vector<node> v,v1,v2,v3;
while(start!=-1){
if(a[start].data<0) v1.push_back(a[start]);
else if(a[start].data>=0 && a[start].data<=k) v2.push_back(a[start]);
else v3.push_back(a[start]);
start=a[start].next;
}
for(int i=0;i<v1.size();i++) v.push_back(v1[i]);
for(int i=0;i<v2.size();i++) v.push_back(v2[i]);
for(int i=0;i<v3.size();i++) v.push_back(v3[i]);
for(int i=0;i<v.size()-1;i++) v[i].next=v[i+1].add;
v[v.size()-1].next=-1;
for(int i=0;i<v.size();i++) v[i].print();
}