题意:
给出一个图的DFS和BFS遍历,求出改图
分析:
直接在DFS序列中,每相邻点间连一条边。然后要保证BFS序列,直接把所有点按序连到1号点即可。
图不存在的情况是BFS和DFS的第二个点不一致。
加边的时候务必注意不能加重了(因为该原因导致最终没过掉该题。)
代码:
#define maxn 5010
int a[maxn], b[maxn];
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (int i = 0; i < n; i++) {
scanf("%d", &b[i]);
}
if (n >= 2 && a[1] != b[1]) {
puts("-1");
return 0;
}
printf("%d\n", 2 * n - 3);
for (int i = 1; i < n; i++) {
printf("%d %d\n", b[i - 1], b[i]);
}
for (int i = 2; i < n; i++) {
printf("%d %d\n", 1, a[i]);
}
}
从DFS&BFS求图结构
本文介绍了一种根据给定的深度优先搜索(DFS)和广度优先搜索(BFS)序列重构图的方法。首先确保DFS和BFS序列的起点一致,接着通过连接DFS序列中的相邻节点以及将所有其他节点依次与起点相连来重建图结构。
5139

被折叠的 条评论
为什么被折叠?



