看注释。
与上一题相同的思路,在结构体中加入一个标记值flag将结构体按顺序排列,输出的话,每一个循环输出最后的结构体和最前的结构体,具体实现看代码。
这题只有22分,并没有AC,由于能力有限,希望大佬指点一下,哪里可能会错,谢谢大佬。
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
typedef struct node
{
int pre;
int data;
int next;
int flag;
}Node;
bool cmp(Node a,Node b)
{
return a.flag<b.flag;
}
int main()
{
Node que[100005];
int i,j,a,begin,n,x=0;
cin>>begin>>n;
for (i=0;i<100005;i++)
que[i].flag=100005;
for (i=0;i<n;i++)
{
cin>>a;
cin>>que[a].data>>que[a].next;
que[a].pre=a;
}
for (i=begin;i!=-1;i=que[i].next)
que[i].flag=x++;
sort(que,que+100005,cmp);
for (i=0,j=n-1;i!=j;)
{
if (i!=j)
{
printf("%05d %d %05d\n",que[j].pre,que[j].data,que[i].pre);
j--;
}
if (i!=j)
{
printf("%05d %d %05d\n",que[i].pre,que[i].data,que[j].pre);
i++;
}
if (i==j)
{
printf("%05d %d -1",que[i].pre,que[i].data);
break;
}
}
}