第一范文网 - 专业文章范例文档资料分享平台

数据结构课程设计实验报告

来源:用户分享 时间:2025/5/24 5:56:45 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

}

}

po=node.level;

} } else { }

po++; //下一层

//将下一层节点入栈 for(i=0;i

//判断下一个压栈的节点在不在当前路径 bool isIn=false; for(j=0;j

if(i==aNode[j].dot) { }

isIn=true; break;

//不在当前路径 if(!isIn) { }

node.dot=i; node.level=po; top++; s[top]=node;

for(i=0;i

printf(\ printf(\ printf(\ printf(\权值为:\ for(i=1;i

printf(\printf(\printf(\

int lujing(mgraph g,int v0,int vn,int dist[],int prev[]) { int i;

int j;

int maxint = 65535;//定义一个最大的数值,作为不相连的两个节点的代价权值 int *s ;//定义具有最短路径的节点子集s s = (int *)malloc(sizeof(int) *g.N); //初始化最小路径代价和前一跳节点值 for (i= 0; i

dist[i] = g.edge[v0][i]; s[i] = 0;

if (dist[i] == maxint) {

prev[i] = 0; } else {

prev[i] = v0; } }

dist[v0] = 0;

s[v0] = 1;//源节点作为最初的s子集 for (i = 1; i < g.N; i++) {

int temp = maxint; int u = v0;

//加入具有最小代价的邻居节点到s子集 for (j = 1; j <=g.N; j++)

{

if ((!s[j]) && (dist[j] < temp)) {

u = j;

temp = dist[j]; } }

s[u] = 1;

//计算加入新的节点后,更新路径使得其产生代价最短 for (j = 1; j <=g.N; j++)

{

if ((!s[j]) && (g.edge[u][j] < maxint)) {

int newdist = dist[u] + g.edge[u][j]; if (newdist < dist[j]) {

dist[j] = newdist;

prev[j] = u; } } } } return dist[vn];

}

void ShowPath(mgraph g,int v0,int u,int *dist,int *prev) { int j= 0;

int y=u;

int count = 0;

int *way ;

way=(int *)malloc(sizeof(int)*(g.N+1)); //回溯路径

while (y!= v0) { count++;

way[count] = prev[y]; y= prev[y];

}

//输出路径

for (j=count;j>=1;j--) { printf(\ }

}

//求解任意两个顶点之间的经过指定一顶点的最短路径 void zhiding1(mgraph g,int v0,int vn,int vx) { int s1,s2,distance;

int *dist;//最短路径代价

int *prev;//前一跳节点空间 dist = (int *)malloc(sizeof(int)*g.N); prev = (int *)malloc(sizeof(int)*g.N); printf(\输出路径是:\ s1=lujing(g,v0,vx,dist,prev); //计算v0到vx的最短路径 ShowPath(g,v0,vx,dist,prev);

s2=lujing(g,vx,vn,dist,prev); //计算vx到vn的最短路径 ShowPath(g,vx,vn,dist,prev); printf(\

printf(\

distance=s1+s2; //合起来便是v0到vn的最短路径

printf(\起始点为%d终点为%d的经过指定点%d

最短路径

的为:%d\

}

//求解任意两个顶点之间的经过指定两顶点的最短路径

void zhiding2(mgraph g,int v0,int vn,int vx1,int vx2) {

int s11,s12,s13,s21,s22,s23,distance1,distance2,distance; int *dist;//最短路径代价

int *prev;//前一跳节点空间 dist = (int *)malloc(sizeof(int)*g.N); prev = (int *)malloc(sizeof(int)*g.N);

printf(\输出路径是:\

s11=lujing(g,v0,vx1,dist,prev); s12=lujing(g,vx1,vx2,dist,prev); s13=lujing(g,vx2,vn,dist,prev);

distance1=s11+s12+s13; //计算从v0经vx1经vx2到vn的最短路径 s21=lujing(g,v0,vx2,dist,prev);

s22=lujing(g,vx2,vx1,dist,prev); s23=lujing(g,vx1,vn,dist,prev);

distance2=s21+s22+s23; //计算从v0经vx2经vx1到vn的最短路径 if(distance1

distance=distance1; s11=lujing(g,v0,vx1,dist,prev); ShowPath(g,v0,vx1,dist,prev); s12=lujing(g,vx1,vx2,dist,prev); ShowPath(g,vx1,vx2,dist,prev); s13=lujing(g,vx2,vn,dist,prev);

ShowPath(g,vx2,vn,dist,prev); printf(\printf(\

} else {

distance=distance2;

s21=lujing(g,v0,vx2,dist,prev); ShowPath(g,v0,vx2,dist,prev);

s22=lujing(g,vx2,vx1,dist,prev); ShowPath(g,vx2,vx1,dist,prev); s23=lujing(g,vx1,vn,dist,prev);

ShowPath(g,vx1,vn,dist,prev); printf(\

printf(\}

printf(\起始点为%d终点为%d的经过指定点一%d以及指定点二%d的最短路径

搜索更多关于: 数据结构课程设计实验报告 的文档
数据结构课程设计实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c3papc0hz4n3blzb1bsx2_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top