- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验五:分枝限界法_最短路径问题概要
HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY
算法设计与分析
实 验 报 告
实验项目 实验五 实验类别 验证性 学生姓名 王龙 学生学号 201400797 完成日期 2016-5-6 指导教师 刘振章 实验成绩 评阅日期 评阅教师 刘振章
实验五:分枝限界法
【】
【】
【】
要求完成:⑴算法描述⑵写出程序代码⑶完成调试⑷进行过程与结果分析。
【
由于要找的是从源到各顶点的最短路径,所以选
Fenzhi函数 在初始化的时候 对最优权重赋上一个最大值
【程序代码】
# include stdio.h
# define MAX 9
void input (int d[], int s[], int t[][MAX], int ti[][MAX], int n, int k);
void fenzhi (int d[], int s[],int t[][MAX], int ti[][MAX], int n, int k);
void output (int d[], int s[], int n);
int main ()
{
int n, k;
int d[MAX], s[MAX], t[MAX][MAX] = {0}, ti[MAX][MAX] = {0};
n = 7; k = 11;
printf (请输入结点的个数:);
scanf (%d, n);
printf (请输入结点的边数:);
scanf (%d, k);
input (d, s, t, ti, n, k);
fenzhi (d, s, t, ti, n, k);
output (d, s, n);
return 0;
}
void input (int d[], int s[], int t[][MAX], int ti[][MAX], int n, int k)
{
int i, j, m, z;
printf (请输入图的边: i, j, t[i][j] \n);
for (z=0; zk; z++)
{
scanf (%d %d %d, i, j, m);
t[i][j] = m;
ti[i][j] = 1;
}
for (i = 0; i n; i++) //初始化数组
{
d[i] = 99; // 赋个最大值 s[i] = -1;
}
}
void fenzhi (int d[], int s[],int t[][MAX], int ti[][MAX], int n, int k)
{
int i, j, zi;
d[0]=0; s[0]=-1;
for (i=0; in; i++)
{
printf (当前扩展节点:%d,权重:%d : \n, i, d[i]);
for (j=0; jn; j++)
{
if (ti[i][j] == 1 )
{
if ( d[j]t[i][j]+d[i])
{
d[j]=t[i][j]+d[i]; //最短长度
s[j]=i; //前驱结点
}
if (j != n /* j != 6 */ )
printf (入队结点:%d ,最优权重:%d \n, j, d[j]);
}
}
printf (\n);
}
}
void output (int d[], int s[], int n)
{
int i, j=0, zi[MAX];
printf (从源点到各个结点的最短路径: \n);
for (i=0; in; i++)
printf (dist[%d] = %d \n, i, d[i]);
printf (\n);
printf (从源点到终点的最短路径长度为: %d \n, d[n-1]);
printf (其路径为: %d , n-1);
zi[j] = s[n-1];
printf (---- %d , zi[j]);
while (zi[j] != 0)
{
j++;
zi[j] = s[zi[j-1]];
printf (---- %d , zi[j]);
}
printf (\n);
}
【运行结果】
图1 输入数据
文档评论(0)