- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
//Dijkstra算法 ? 时间复杂度 ? O(NV^2) //D[i]为v到i的最短路径长度 //P[i]为此最短路径中i的前趋 //注意: //1。i,j不相邻时E[i][j]应为infinity //2。不使用AV //3。边权不能为负值 void ? Graph::Dijkstra(int ? v,vector int ? D,vector int ? P)const { vector bool ? M ? = ? VM; for(int ? i=0;i NV;i++) { ? ? ? D[i] ? = ? E[v][i]; ? ? P[i] ? = ? v; ? ? } M[v] ? = ? false; ? D[v] ? = ? 0; for(;;) { int ? min,w; min ? = ? infinity; for(int ? j=0;j NV;j++) { if(!M[j])continue; if(D[j] ? min){ ? ? ? min ? = ? D[j]; ? ? w ? = ? j; ? } } if(min ? == ? infinity)break; ? ? ? M[w] ? = ? false; for(int ? j ? = ? 0;j NV;j++) { if(!M[j])continue; if(min ? + ? E[w][j] D[j]){ ? ? ? D[j] ? = ? min ? + ? E[w][j]; ? ? P[j] ? = ? w; ? ? } } } }
//Floyd算法 ? 时间复杂度O(NV*|E| ? + ? NV^2) //D[i][j]为i到j的最短距离 //P[i][j]为求出D[i][j]时j的前趋 //注意: //1。i,j不相邻时E[i][j]应为infinity //2。边权不能为负值 //3。不使用AV void ? Graph::Floyd_Warshall(VVI ? D,VVI ? P)const { int ? i,j,k; for ? (i=0;i NV;i++) for ? (j=0;j NV;j++) { ? ? ? D[i][j]=E[i][j]; P[i][j]=i; ? ? ? ? ? ? ? } for ? (i=0;i NV;i++) ? { ? ? ? D[i][i]=0;P[i][i]=0; ? } for ? (k=0;k NV;k++) { if(!VM[k])continue; for ? (i=0;i NV;i++) { if(!VM[i])continue; if(D[i][k] ? == ? infinity)continue; for ? (j=0;j NV;j++) { if(!VM[j])continue; if ? (D[i][j] D[i][k]+D[k][j]) { ? ? ? D[i][j]=D[i][k]+D[k][j]; ? ? P[i][j]=P[k][j]; ? ? } } } } }
求一个点到其他各点的最短路径
function [d,DD]=dijkstra(D,s)%Dijkstra最短路算法Matlab程序用于求从起始点s到其它各点的最短路%D为赋权邻接矩阵%d为s到其它各点最短路径的长度%DD记载了最短路径生成树[m,n]=size(D);d=inf.*ones(1,m);d(1,s)=0;Vdd=zeros(1,m);dd(1,s)=1;y=s;DD=zeros(m,m);DD(y,y)=1;counter=1;while length(find(dd==1))m? ? for i=1:m? ?? ? if dd(i)==0? ?? ?? ? d(i)=min(d(i),d(y)+D(y,i));? ?? ? end? ? end? ? ddd=inf;? ? for i=1:m? ? if dd(i)==0d(i)ddd? ?? ?ddd=d(i);? ?? ?end? ? end? ? yy=find(d==ddd);? ? counter=counter+1;? ? DD(y,yy(1,1))=counter;? ? DD(yy(1,1),y)=counter;? ? y=yy(1,1);? ? dd(1,y)=1;end
匈牙利算法的matlab实现
function [y,fval,flag]=Hungary(C)%y返回的是最优值的行列号%******
文档评论(0)