- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最短权路径
用于计算一个节点到其他所有节点最短路径。主要特点是以任一起始点为原点,沿权值最小的路径向其它节点扩展,直到将全部节点包含进最小路径集。
基本思想
已知图?G=(V,E),我们希望找出从某任一结点Vi∈V到V中的每个结点的最短路径。
先任取一点V0,选择V0到周边各点中最短路径的一点V1,将d(V0,V1)加入最短路径集d(S),V1加入点集S,然后选择V1到周边各点中最短路径?[1]?的一点V2,将d(V0,V2)加入最短路径集d(S),V2加入点集S,如此不断将新点和最短路径加入点集和最短路径集,直到Vk只有到点集S={V0,V1,……,Vk-1,Vk}的路径,这时将Vk-1选作起点,看有没有到除去点集S={V0,V1,……,Vk-1,Vk}其他点的最短路径,如果有将d(Vk-1,Vk+1)加入最短路径集d(S),Vk+1加入点集S,如果没有选择Vk-2作为起点,再看有没有到除去点集S={V0,V1,……,Vk-1,Vk}其他点的最短路径,如此反复,直到S点集包含全部点并且最后一条路径是从点集{V0,V1,……,Vn-1,Vn}到{V0,V1,……,Vn-1,Vn}。任意两点Vi, Vj最短权路径取最短路径集两点所经过点的最短路径和与两点直接路径的最小值即D(Vi, Vj)=min{
??
,d(Vi, Vj)}
举例
一公司在六个城市c1,c2,…,c6中的每一个都有分公司。从ci到cj的班机旅费由下列矩阵中的第i行第j列元素给出(∞表示没有直接班机):
0 ∞ 5? 30 ∞ ∞
2 0 ∞ ∞ 8? ∞
∞? 15 0 ∞ ∞ 7
∞ ∞ ∞ 0 ∞ ∞
∞ ∞? ∞ 4 0 ∞
∞ ∞ ∞? 10 18 0
最短权路径测试程序代码:
#include stdio.h
#include malloc.h
typedef char DataType;
#define MaxSize 10
#define MaxVertices 10
#define MaxWeight 10000
#include SeqList.h
#include AdjMGraph.h
#include WangJian.h
void main(void)
{
AdjMGraph g;
char a[]={A,B,C,D,E,F};
RowColWeight rcw[]={{0,2,5},{0,3,30},{1,0,2},{1,4,8},{2,1,15},{2,5,7},{4,3,4},{5,3,10},{5,4,18}};
int i,n=6,e=9;
int distance[6],path[6];
CreatGraph(g,a,n,rcw,e);
WangJian(g,0,distance,path);
for(i=0;in;i++)
printf(到顶点%c的最短距离为%d\n,g.Vertices.list[i],distance[i]);
printf(从顶点%c到其他各顶点最短路径的前一顶点为:\n,g.Vertices.list[0]);
for(i=0;in;i++)
if(path[i]!=-1)
printf(到顶点%c的前一顶点为%c\n,g.Vertices.list[i],g.Vertices.list[path[i]]);
}
包含的顺序表的头文件代码:
#define MaxSize 10
#define MaxVertices 10
#define MaxWeight 10000
typedef char DataType;
typedef struct
{
DataType list[MaxSize];
int size;
} SeqList;
void ListInitiate(SeqList *L)
{
L-size=0;
}
int ListLength(SeqList L)
{
return L.size;
}
int ListInsert(SeqList *L,int i,DataType x)
{
int j;
if(L-size=MaxSize)
{
printf(顺序表已满无法插入!\n);
return 0;
}
else if(i0||iL-size)
{
printf(参数i不合法!\n);
return 0;
}
else
{
for(j=L-size;ji;j--) L-list[j]=L-list[j-1];
L-list[i]=x;
L-size++;
return 1;
}
}
int
您可能关注的文档
最近下载
- 1223S00041-保护生物学-2023版人才培养方案课程教学大纲.docx VIP
- 【幼儿教育】蒙氏培训模版课件.ppt
- 零售药店医疗保障定点管理暂行办法.docx VIP
- 数据资产 数据资产入表指南.docx VIP
- 党课PPT课件:重温八项规定精神,一以贯之将作风建设进行到底.pptx VIP
- 浅析海南海药股份有限公司财务风险分析及防范.docx VIP
- 医疗机构消防安全突出火灾风险和检查要点.pptx
- 2025年中国球星卡行业发展前景预测及投资方向研究报告.docx
- 厦大团队:DeepSeek大模型赋能高校教学和科研(120页PPT,建议收藏).pptx VIP
- 汽车加油加气加氢站技术标准.pdf
文档评论(0)