Java代码
一开始先用Java写,但最后一个测试点运行超时
参照思路
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.Vector;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//Scanner in = new Scanner(System.in);
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String[] len1 = in.readLine().split(" ");
// int start = in.nextInt();
// int n = in.nextInt();
int start = Integer.parseInt(len1[0]);
int n = Integer.parseInt(len1[1]);
Node[] node = new Node[100001];
int a,b,c;
for(int i=0;i<n;i++) {
String[] len2 = in.readLine().split(" ");
a = Integer.parseInt(len2[0]);
b = Integer.parseInt(len2[1]);
c = Integer.parseInt(len2[2]);
node[a] = new Node(b,c);
//node[in.nextInt()] = new Node(in.nextInt(),in.nextInt());
}
//创建一个向量类的对象,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。
Vector<Integer> list = new Vector<Integer>();
for(;node[start].next!=-1;start=node[start].next) {
list.add(start);
}
list.add(start);//存入最后一个next,-1
int i=0;
int j=list.size()-1;
while(i<=j) {
//前后同时遍历
if(j==list.size()-1) {
//%5d:输出的整型宽度至少为5位
System.out.print(String.format("%05d",list.get(j))+" "+node[list.get(j)].date+" ");
j--;
}
else {
System.out.println(String.format("%05d",list.get(j)));
System.out.print(String.format("%05d",list.get(j))+" "+node[list.get(j)].date+" ");
j--;
}
if(i<=j) {
System.out.println(String.format("%05d",list.get(i)));
System.out.print(String.format("%05d",list.get(i))+" "+node[list.get(i)].date+" ");
i++;
}
if(i>j) {
System.out.println("-1");
}
}
}
}
class Node{
public int date;
public int next;
public Node(int date,int next) {
this.date = date;
this.next = next;
}
}
C代码
还没学c++就先用c吧,c可以全部通过
参考
#include<stdio.h>
#include<string.h>
struct Node{
int pre,data,next;
}node[100001];
int main(){
int i,j,start,end,n,a,b,c;
scanf("%d%d",&start,&n);
for(i=0;i<n;i++){
scanf("%d%d%d",&a,&b,&c);
node[a].data = b;
node[a].next = c;
if(c!=-1)
node[c].pre = a;//保存下一个结点的前一个结点地址
else
end = a;//保存最后一个结点地址
}
for(;;)
{
printf("%05d %d ",end,node[end].data);
if(end==start)
{
printf("-1\n");
break;
}
else{
printf("%05d\n",start);
}
printf("%05d %d ",start,node[start].data);
end = node[end].pre;
if(start==end)
{
printf("-1\n");
break;
}
else{
printf("%05d\n",end);
}
start=node[start].next;
}
return 0;
}