貌似是某年408数据结构算法考研题。(解析如下:)
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
typedef struct Link
{
char data;
int next;
}Link;
Link L[100010];//L以地址存放
int main()
{
int F1, F2, N, ad, ad1, ad2, len1 = 0, len2 = 0, i;
scanf("%d %d %d", &F1, &F2, &N);
for(i=0; i<N; i++)
{
scanf("%d", &ad);
getchar();//小心空格被吸收掉
scanf("%c %d", &L[ad].data, &L[ad].next);
}
for(ad = F1; ad != -1; ad = L[ad].next, len1++);//计算长度
for(ad = F2; ad != -1; ad = L[ad].next, len2++);
for(ad1 = F1, i = 0; i < len1-len2; ad1 = L[ad1].next, i++);//让两者从倒着数相同的位置开始
for(ad2 = F2, i = 0; i < len2-len1; ad2 = L[ad2].next, i++);
while(ad1 != ad2)
{
ad1 = L[ad1].next;
ad2 = L[ad2].next;
}
if(ad1 == -1)printf("-1");
else printf("%05d", ad1);//还是要考虑格式,最后一个测试用例是这个坑……
return 0;
}