- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验无向图中求两点间的所有简单路径.doc
实验6无向图中求两点间的所有简单路径
计科二班 宋瑞霞 20100810217
一、需求分析
1、用无向图表示高速公路网,其中顶点表示城市,边表示城市之间的高速公路。设计一个找路程序,获取两个城市之间的所有简单路径。
2、由用户通过键盘输入:
(1)结点总数,
(2)结点的城市编号(4位长的数字,例如电话区号,长沙是0731),
(3)连接城市的高速公路(用高速公路连接的两个城市编号标记),
(4)要求取所有简单路径的两个城市编号。
不对非法输入做处理,即假设输入都是合法的。
3、输出:将所有路径(有城市编号组成)输出到DOS界面上。
4、测试数据:
输入:6 8(结点数和边数)
0001 0002 0003 0004 0005 0006(结点的城市编号)
0001 0003(连接城市间的高速公路)
0001 0005
0002 0006
0003 0002
0003 0004
0003 0006
0004 0006
0005 0006
0001 0002(要求取所有简单路径的两个城市编号)
输出:0001 0003 0002(两个城市间的所有简单路径)
0001 0003 0006 0002
0001 0003 0004 0006 0002
0001 0005 0006 0002
0001 0005 0006 0003 0002
0001 0005 0006 0004 0003 0002
二、概要设计
抽象数据类型
根据对问题的分析,要用无向图表示高速公路网,其中顶点表示城市,边表示城市之间的高速公路。所以要建立一个图来实现。
图的ADT设计如下:
数据元素:包括一个顶点集合和一个边集合
数据关系:网状关系
基本操作:
Graph(int numvert) //构造图结构
virtual int n() =0; //获取顶点的个数
virtual int first(int ) =0; //访问所给顶点的第一个邻居
virtual int next(int ,int ) =0; //访问当前邻居的下一个邻居
virtual void setedge(int ,int ) =0; //建立所给两顶点之间的边
virtual void setmark(int v,int val) =0; //给顶点做标记
virtual int getmark(int v) =0; //获取顶点是否已做标记
算法的基本思想
首先,根据输入的结点总数构建一个线性表,将输入的城市编号即顶点依次添加到线性表中;然后就是在图的二维数组中存入边即连接两个城市间的高速公路,这步操作首先要找到两个城市即两个顶点在线性表中的位置如m和n,然后再在二维数组相应的位置(m,n)上存入1建立该条边;最后当所有的边都存入图中后,由于深度优先的结果是沿着图的某一分支搜索直至末端,然后回溯,在沿着另一条分支搜索,依次类推,故对图进行深度优先搜索,即可得到两个城市间的简单路径。
程序的流程
程序由四个模块组成:
输入模块:输入图的顶点和边;
构建模块:用线性表存储顶点,用二维数组存储边,构建图结构;
处理模块:对图进行深度优先搜索;
输出模块:将深度优先搜索后得到的所有简单路径输出到DOS界面上。
三、详细设计
物理数据类型
该问题需要输入4位长的数字表示的城市编号,为了能够存储,采用C++语言中的字符串string来定义变量线性表中的元素类型,数组的大小为4。
根据用邻接矩阵表示法来实现图的相关知识,要先建立一个线性表来存储顶点,由于结点总数即图的顶点数已知,则线性表的长度已知,故用顺序表实现比较好,因为顺序表是预先分配一段连续的存储空间,而且没有结构性开销。
1、顺序表的具体实现如下:
templateclass Elem(在本问题,Elem为string)
class Alist
{
private:
int maxSize;//顺序表的最大长度
int listSize;// 顺序表的实际长度
int fence;//指向当前位置
Elem * listArray;//存储顺序表元素的数组
public:
Alist(int size=DefaultListSize)//构造一个由用户指定最大长度的空顺序表
{
maxSize =size;
listSize=fence=0;
listArray= new Elem [maxSize];
}
bool append(const Elem item)
您可能关注的文档
最近下载
- [逻辑书籍]《万物解释者》.pdf
- 最新施工单位开工前需上报监理资料资料.pdf VIP
- 储罐区风险评估、报告.doc
- 事业单位招考(档案管理)基础知识练习题及答案.pdf
- 美丽中国Wild_China-全集-中英文对照.pdf VIP
- 建设寺庙申请报告.doc
- 中学生古诗文知识考试试题(真题)及答案.docx
- 五官科技术操作规范.doc
- 2022年个人所得税六项专项附加扣除和APP操作指引专题培训辅导PPT课件(包括延续实施全年一次性奖金等优惠政策讲解).ppt
- 【数学学科融合】“数学+”跨学科主题学习教学探索——以《年、月、日的秘密》之“编年历”为例【数学学科融合】“数学+”跨学科主题学习教学探索——以《年、月、日的秘密》之“编年历”为例.docx
文档评论(0)