#include<stdio.h> #include<string.h> int path[101][101]={0}; void p(int e,int s) { int k=path[e][s]; if(k!=0) { p(e,k); printf(" %d",k); p(k,s); } } int main() { memset(path,0,sizeof(path)); int adj[101][101]; int n; scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { scanf("%d",&adj[i][j]); if(adj[i][j]==0) adj[i][j]=65535; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) if(k!=i) for(int j=1;j<=n;j++) if(j!=i && j!=k) { if(adj[i][k]+adj[k][j]<adj[i][j]) { adj[i][j]=adj[i][k]+adj[k][j]; path[i][j]=k; } } int s,e; scanf("%d%d",&s,&e); if(adj[s][e]==65535) printf("No way!! "); else { printf("%d ",adj[s][e]); printf("%d",s); p(s,e); printf(" %d ",e); } return 0; } /* 著名的floyd算法,它是多源最短路径算法,也就说可以给除任意两结点的最短路, 如果它们有路,时间复杂度O(n^3)
算法分析:
先提出疑问,这个算法是怎样做到求最短路径的呢?
其实对于最短路,我们说的路最短也就是是权值最小,并不是单方面的说路的长度
这个权值可以是造价,耗费,长度,时间等等,我们首先要理解这一点。
从小张家到小李家有50米的路程,到小王家有10米,小王家到小李家20米远,这时我们
要从小张家到王家最少要走多远,答案是30米,我们选择路线的时候没有直接走过去,而且发现
了一中转点,可以使得整个路程更短。
其实floyd就用了这种思想,第一个循环枚举了用哪个
点来作为中转,第二第三循环枚举从谁走到谁,通过枚举所有的情况,最后就会得到最小值。
这时你会想,一个最短路是看整体的整个图来确定的,为什么每次两个点就可以搞定呢?
其实是这样的,每个使用过的点,在前一阶段求出了一个值,这时候再用它就等于已经继承了
它前面所计算出来的最短路的值,同过这个最短值上再去选择一条路,然后新形成的路还是一条
最短路,只是起终点不一样罢了。
这个算法抽象度较高,需加以图解和多想,掌握这个算法比较重要,它的思想在以后的
图论学习中比较重要,特别是继承的这种思想和松弛技术。
*/
80vps怎么样?80vps最近新上了香港服务器、美国cn2服务器,以及香港/日本/韩国/美国多ip站群服务器。80vps之前推荐的都是VPS主机内容,其实80VPS也有独立服务器业务,分布在中国香港、欧美、韩国、日本、美国等地区,可选CN2或直连优化线路。如80VPS香港独立服务器最低月付420元,美国CN2 GIA独服月付650元起,中国香港、日本、韩国、美国洛杉矶多IP站群服务器750元/月...
关于HostYun主机商在之前也有几次分享,这个前身是我们可能熟悉的小众的HostShare商家,主要就是提供廉价主机,那时候官方还声称选择这个品牌的机器不要用于正式生产项目,如今这个品牌重新转变成Hostyun。目前提供的VPS主机包括KVM和XEN架构,数据中心可选日本、韩国、香港和美国的多个地区机房,电信双程CN2 GIA线路,香港和日本机房,均为国内直连线路,访问质量不错。今天和大家分享下...
昔日数据怎么样?昔日数据新上了湖北十堰云服务器,湖北十堰市IDC数据中心 母鸡采用e5 2651v2 SSD MLC企业硬盘 rdid5阵列为数据护航 100G高防 超出防御峰值空路由2小时 不限制流量。目前,国内湖北十堰云服务器,首月6折火热销售限量30台价格低至22元/月。(注意:之前有个xrhost.cn也叫昔日数据,已经打不开了,一看网站LOGO和名称为同一家,有一定风险,所以尽量不要选择...