云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 数据结构与算法专题实验报告 - 图文

数据结构与算法专题实验报告 - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/5/4 19:38:30

else if (s>=0&&s=0&&e0) {

cost[s][e =cost[e][s]=len; // 实现无向图的操作

i++; } else

cout<<\边值错误,请重新输入!\} }

void shortdjs() //寻找最短路径的算法函数的实现 {

int s[MAX];

int mindis,dis,i,j,v0=0,u; for(i=0;i

dist[i]=cost[v0][i]; path[i].pnode[0]=v0; path[i].num=0; s[i]=0; } s[v0]=1;

for(i=1;i

mindis=up; for (j=1;j

if(s[j]==0&&dist[j]

{ u=j;

mindis=dist[j];

}

s[u]=1; //当s[u]=1时表示权值为无穷大 for (j=1;j

dis=dist[u]+cost[u][j]; if(dist[j]>dis) {

dist[j]=dis; path[j].num++;

path[j].pnode[path[j].num]=u; } }

path[i].num++;

path[i].pnode[path[i].num]=i; } }

void dispath() // 输出最短路径 {

int i,j;

cout<

cout<终点) 最短长度 最短路径\ for(i=1;i

cout<<\ if(dist[i]

cout<

cout<<\for (j=0;j

cout<<\} }

void main () //主函数 {

creatgraph(); //直接调用三个函数就行 shortdjs(); dispath(); }

返回

第4题 最短路径

1 题目:

创建一个具有n(n≥1)个顶点的无向图的邻接矩阵,并对其按照“深

度优先搜索”和“广度优先搜索”方法进行遍历。

2 目标:

1.编写C程序予以实现。

2.程序要求能输入图的顶点数、边数以及边的关系,并自动生成邻接矩阵。 3.结果输出邻接矩阵和遍历的路径。 4.熟悉无向图的两种遍历算法。

3 设计思想:

1.

考虑用一个n维数组来存放无向图,若两个结点之间有边,则n维数组对应下标的那个元素值为1,否则为0;

2.

在输入图的顶点数和边数时我充分考虑了边界条件,顶点数G.vexnum在[0,MAXV]范围内,边数在[0,G.vexnum*(G.vexnum-1)/2]范围内,在这个

范围内,程序继续向下执行,否则返回重新输入;

3. 4.

输出邻接矩阵的实质是输出 n维数组,我用两重循环来实现; 深度优先遍历我采用迪杰特斯拉算法,不过要在此算法中间加一个判断,所有的结点是否都已经遍历过,如果是就退出,如果不是,则按顺序从序号小的开始向大的寻找,找到一个没有遍历过的结点继续调用深度优先遍历算法;

5. 6.

广度优先遍历我采用了非递归算法,其实质和深度优先遍历算法相同; 在主函数中直接调用

CreatGraph(G), DispMatrix(G) ,

DepthDisp(G,v) ,WidthDisp(G)函数即可。

4 算法描述:

step1:设置无向图最多的顶点数// 这个设置为了更好的输出邻接矩阵;

step2: 定义无向图的数据结构; step3:实现生成无向图函数CreatGraph(G)

a. 输入顶点数n,判断它是否在允许的范围内,不在则返回重新输入;

b. 输入无向图的边数G.arcnum,判断它是否在允许的范围内,不在则返回重新输

入 ;

c. 输入边,for语句(k=1 to G.arcnum){ 输入两顶点v,w,判断v!=w &

0

step4:实现输出邻接矩阵函数 DispMatrix(Graph &G) , 双重for循环实

现输出无向图的邻接矩阵;

step5:实现深度优先遍历的递归算法函数DepthDisp(Graph &G,int v) a. 从v开始遍历,设置计数器num=0 ,并置顶点v已访问;

b. for语句(i=1 to G.vexnum)判断 G.arcs[v][i]!=0&&visited[i]==0,

如果是递归调用深度优先遍历的递归算法函数DepthDisp(G, i),如果不是则退出;

c. 用for和if 语句判断是否所有的顶点都已经遍历完,

if num

搜索更多关于: 数据结构与算法专题实验报告 - 图文 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

else if (s>=0&&s=0&&e0) { cost[s][e =cost[e][s]=len; // 实现无向图的操作 i++; } else cout<<\边值错误,请重新输入!\} } void shortdjs() //寻找最短路径的算法函数的实现 { int s[MAX]; int mindis,dis,i,j,v0=0,u; for(i=0;i

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com