没有合适的资源?快使用搜索试试~ 我知道了~
首页数据结构代码:神秘国度爱情故事
数据结构题目: 某个太空神秘国度中有很多美丽的小村,从太空中可以想见,小村间有路相连,更精确一点说,任意两村之间有且仅有一条路径。小村 A 中有位年轻人爱上了自己村里的美丽姑娘。每天早晨,姑娘都会去小村 B 里的面包房工作,傍晚 6 点回到家。年轻人终于决定要向姑娘表白,他打算在小村 C 等着姑娘路过的时候把爱慕说出来。问题是,他不能确定小村 C 是否在小村 B 到小村 A 之间的路径上。你可以帮他解决这个问题吗?
资源详情
资源评论
资源推荐


1
一、课程设计题目
某个太空神秘国度中有很多美丽的小村,从太空中可以想见,小村间有路
相连,更精确一点说,任意两村之间有且仅有一条路径。小村 中有位年轻人
爱上了自己村里的美丽姑娘。每天早晨,姑娘都会去小村 里的面包房工作,
傍晚 点回到家。年轻人终于决定要向姑娘表白,他打算在小村 等着姑娘路
过的时候把爱慕说出来。问题是,他不能确定小村 是否在小村 到小村
之间的路径上。你可以帮他解决这个问题吗?
二、编程要求
输入由若干组测试数据组成。每组数据的第 行包含一正整数 《 《
代表神秘国度中小村的个数,每个小村即从 到 编号。接下来
有 行输入,每行包含一条双向道路的两个端点小村的编号,中间用空格
分开。之后一行包含一正整数 《 《 ,代表着该组测试问题
的个数。接下来 行,每行给出 、 、 三个小村的编号,中间
用空格分开。当 为 时,表示全部测试结束,不要对该数据做任何处理。
输出要求:对每一组测试给定的 、 、,在一行里输出答案,即:如果
在 和 之间的路径上,输出 ,否则输出 。
三、计算原理
任意两村之间有且仅有一条路径”,这表明这是一棵拥有 个结点的树,
每次查询 时是判断 是否在亮点 , 的路径上。
在 的路径上有两个规律:点 当且仅当是点 或点 其中一个结点
的祖先。或者 是 的最低公共祖先时,点 就在 的路径上。
首先:通过插入的路径建立一个普通的树,默认树中已经拥有村 的结点,
每次插入路径的时候,路径的其中一个端点需要已经存在树中了。通过插入的
路径,找到已经在树中插入的结点的位置,把另一个村的结点插入到孩子结点。
通过深度优先遍历遍历树,通过单链表 ,,存储从首结点到目标节点
, 的路径。
()判断点 是否当且仅当是其中一个端点的祖先,就是判断点 是否在
路径中,并且不在 的路径中,或者点 在 的路径中,并且不在 的路径
中。
()判断点 是否为结点 的最近公共祖先, 通过树的特性,若他们存在
公共祖先,则他们有路径上最开始都是公共结点,找到最后一个公共结点就是
最近公共祖先。
算法默认:男生在村 或者村 等待,都可以等待到女生。
四、Trellis 图形

2
求节点 和节点 的最低公共祖先,先求出从根节点 到 的路径,再求出 到
的路径,那么最后一个相同的节点就是最低公共祖先。 和
,最后相同的节点事 ,所以最低公共祖先是 节点。
五、实验代码
Village.h 文件
!"#$%&!'()
$!"*")+#'%,
%-"./01
22村庄的结构
'3+%'($#'"%
4
!"'"$)(, 22村庄的编号
'($#'"%5-('#6!%, 22第一个孩子结点
'($#'"%5"7'('6(, 22"7'('6( 指向孩子的兄弟结点
89!*%,
22单链表结构
'3+%'($#':%
4
!"'%', 22路径的村庄编号
'($#':%5"7',

3
8:!";%,
22初始化单链表
!%0"!'%:!";%5<:,
22尾插法插入单链表
0"(':!";%5<:!"'",
22单链表删除结点
%'"%:!";%5<:,
22寻找相同端点的结点
9!*%5-"%%9!*%5!"',
22添加结点
!"'%%%9!*%5<!"'!"',
22获取从根结点到目标结点的路径,并存储在单链表中
='%>'69!*%5!"'?:!";%5<:,
22获取路径
!%='%:'>'69!*%5:!";%5<:!";%5<!"'!"',
22寻找最近公共祖先
!"'='))">("'9!*%5:!";%5<:!";%5<!"'!"',
22判断 是否为其中一个结点当且仅一个结点的祖先
!/'("*>("':!";%5:!";%5!"'#,
Village.cpp 文件
!"#$%@'%7A6@
!"#$%@!*A6@
22初始化单链表
!%0"!'%:!";%5<:
4
:B:!";%5)#!C:!";%, 22开辟空间
:"7'BD::,
8
22尾插法插入单链表
0"(':!";%5<:!"'"
4
:!";%5(5+,
+B:!";%5)#!C:!";%,
(B:, 22( 指向最后一个结点
E6!("7'FBD:: 22若 "7' 不为空,指向下一个结点
4
(B("7',
8
+%'B", 22找到最后一个结点,插入
+"7'BD::,
("7'B+,
('$("'($,
8
22单链表删除结点
%'"%:!";%5<:
4
:!";%5(5+(5?, 22( 指向最后一个结点,+( 指向 ( 的前一个
结点
+(B:,
(B:"7',
E6!("7'FBD::4
+(B(,
(B("7',
8 22找到最后一个不为空的结点,并用 (
指向它
?B+("7', 22? 指向 +( 后面的一个结点
+("7'BD::, 22+( 的 "7' 为空
剩余15页未读,继续阅读













安全验证
文档复制为VIP权益,开通VIP直接复制

评论0