贪心算法求最短路径问题讲解.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
#include iostream.h #include limits const int size=5; //返回最短路径的长度 //edge[size][size],输入参数图信息 //nstart,ndest,起点和终点 //path[size]返回路径 int dijkstra(int edge[size][size],int nstart,int ndest,int path[size]) { int mindis[size];//起点到终点的最短路径产度 bool ins2[size];//标志各点是否在s2中 //初始化 int i; for(i=0;isize;i++) { ins2[i]=true; } ins2[nstart]=false;//初始条件只有nstart在s1中,其余在s2中 for(i=0;isize;i++) { mindis[i]=edge[nstart][i];//初始各点的最短距离 if(edge[nstart][i]INT_MAX) path[i]=nstart;//最短路径的前一点 else path[i]=-1;//前一点点不存在 } //进行计算 while(ins2[ndest])//当ndest还在s2中进行计算 { //查找s2中最短路径的最小值的点 int nminlen=INT_MAX;//最短路径长度的最小值 int npoint=-1;//拥有最小值的点 for(i=0;isize;i++)//查找 { if((ins2[i])(mindis[i]nminlen)) { nminlen=mindis[i]; npoint=i; } } if(nminlen==INT_MAX) break; //更新s2和mindis ins2[npoint]=false;//该点从s2移入s1 for(i=0;isize;i++) { if((ins2[i])(edge[npoint][i]INT_MAX))//对s2中的点与该点有边相连 { int nnewlen=nminlen+edge[npoint][i]; if(nnewlenmindis[i])//如果原路径长 { path[i]=npoint;//更新路径 mindis[i]=nnewlen;//更新路径长度 } } } } return mindis[ndest]; } void outputpath(int path[size],int ndest) { if(path[ndest]==-1) cout没有从起点到vndest的路径endl; else if(path[ndest]==ndest) coutvndest; else { outputpath(path,path[ndest]);//输出前面的路径 cout--vndest;//输出这一段边 } } int main() { int edge[size][size]; int i,j; //构造图信息 for(i=0;isize;i++) { for(j=0;jsize;j++) edge[i][j]=INT_MAX; edge[i][i]=0; } edge[0][1]=10; edge[0][2]=12; edge[1][3]=10; edge[2][4]=7; edge[3][0]=15; edge[3][1]=12; edge[3][4]=7; int path[size];//记录最短路径信息 int npathlength=dijkstra(edge,0,4,path);//计算从v0到v4的最短路径长度 if(npathlength==INT_MAX) cout没有v0到v4路径可通endl; else { cout从v0到v4的最短路径为:endl; outputpath(path,4); coutendl; cout路径长度为:npathlengthendl; } return 0; }

文档评论(0)

勤能补拙 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档