测试的3是有多余的节点,这也是下面代码中,r的初始值是i-1而不是n的原因
#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
map<int,int> mark;//映射,表示从一个节点到另一个节点,例如 1-->2
int a[N];//存放每个节点的值
int s,n;//第一个节点,节点的个数
int node[N];//存放节点
int main()
{
cin>>s>>n;
for(int i=1;i<=n;i++)
{
int now,data,ne;//now表示当前节点 data表示当前节点的数据,ne表示该节点所指的下一个节点
cin>>now>>data>>ne;
mark[now]=ne;//映射 now-->ne
a[now]=data;
}
int p=s;
int i=1;
while(p!=-1)//该题输入的节点不是按顺序输入的,把它改为有顺序的节点,即node[1]-->node[2]-->
{
node[i++]=p;
p=mark[p];
}
int l,r;
for(r=i-1,l=1;r>l;r--,l++)//大家在纸上把那个样例仔细看看,就可以得出这个结论
{
printf("%05d %d %05d\n",node[r],a[node[r]],node[l]);
printf("%05d %d ",node[l],a[node[l]]);
if(r-1==l)//节点总数时偶数时的情况
printf("-1\n");
else printf("%05d\n",node[r-1]);//没有到最后一个节点的情况
}
if(l==r)//节点总数是奇数时的情况
printf("%05d %d -1",node[l],a[node[l]]);
return 0;
}