求助,帮下忙哦。 这个题目,C语言。~

来源:百度知道 编辑:UC知道 时间:2024/06/10 21:34:19
编一个程序,(在只有一个起点的情况下),输入任意但又不违反客观事实的一些路段(路段用两个字母表示,如a,B,要求程序能判断终点的个数。
注意:相同字母的大小写为同一个站点。A,a为同一站点。~
小弟在这谢谢了~
。。。请具体不行吗?

直接写出来撒~~

算法基于这么一个事实,任何一个终点与起点之间必定存在一条路径。如果这条路径上的中间结点,最终终点会和起点重合。所以可以设计这样一个算法:
1 把字母全部转化成大写;
2 构造一个二元组(p,q)的集合S,集合中每个元素代表路段,p,q分别为路段的两端。
3 找出与起点直接相连的点,即由起点出来的路段的另一端点。将这些点存储在一个点的集合T中。
4 从T中取出一个点p,从集合S中找出所有以p为起点的二元组(p,q),将q放入T中(注意集合中元素是不能重复的,即如果q已经在T中就不用加入了),将(p,q)从S中删除。
5 重复步骤3,4,直到集合S为空,则集合T中的点就是所有的终点。它的大小就是所有终点的个数。
注:最终的集合T中可能包括最初的起点,这种情况对应于环路。

给你看一个类似的:
连通问题
假设有一个整数对的序列,每个整数代表某个类型的一个对象,p-q对表示"p连接到q",
即p和q之间连通。假设连通关系具有传递性--如果p与q连通,q与r连通,那么p与r连通。
我们的目标是写一个过滤出那些不在集合中的对的程序:输入p-q对时,
如果已输入的对的集合中没有隐含这样的对(通过连通关系的传递性),那么程序将输出该对。
如果前面输入的对隐含了p与q的连通,那么程序将忽略p-q,准备输入下一对。
输入输出示例如下:
输入 输出 隐含
3-4 3-4
4-9 4-9
8-0 8-0
2-3 2-3
5-6 5-6
2-9 不输出 2-3-4-9
5-9 5-9
7-3 7-3
4-8 4-8
5-6 不输出 5-6
0-2 不输出 0-8-4-3-2
6-1 6-1
1-2 不输出 1-6-5-9-4-3-2

连通问题
该程序读入一组介于0和N之间(包含0,但不包含N)的非负整数对,p-q对表示p和q连通,
输出那些目前尚未连通的输入对。它使用了数组id,每个对象在数