关于floyd 打印路径的问题
我们令 f[i][j] 表示从 i-->j的最短路上j前面的那个点.
显然初始化时 f[i][j]=i; (这样的话先判断一下i是否能到达j好点)
更新条件时,当发现通过点k能使最短路径减少,则 f[i][j]=f[k][j]这也是显然的,相当于把k-->j这条路接在了i--->k上,i-->j的倒数第二个点理应是k-->j时候的那个点。
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int e[105][105],pre[105][105];
int n,m;
void init()
{
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j){
e[i][j]=(i==j?0:inf);
pre[i][j]=i;
}
}
void floyd()
{
for(int k=1;k<=n;++k)
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(e[i][j]>e[i][k]+e[k][j]) {e[i][j]=e[i][k]+e[k][j]; pre[i][j]=k;}
}
void output(int s,int e)
{
if(s==e) {cout<<s<<" ";return;}
int k=pre[s][e];
output(s,k);
cout<<e<<" ";
}
int main()
{
int i,j,a,b,c,q;
cin>>n>>m;
init();
for(i=1;i<=m;++i) cin>>a>>b>>c,e[a][b]=c; //单向边
floyd();
cin>>q;
while(q--){
cin>>a>>b;
cout<<e[a][b]<<" :";
output(a,b);
cout<<endl;
}
return 0;
}
- 关于 BFS 中 打印路径的问题
- 关于Floyd最短路径的path图的生成问题
- 一个关于打印预览的问题
- 求助:关于打印的问题?????
- 关于Java文件路径问题
- 关于ListView的打印问题
- 关于java和web项目中的相对路径问题
- 今天看StarterKit.Communities中的关于获取路径部分,发现一个问题?难道老外也会不仔细看MSDN,还是?
- 关于Java文件路径问题 (转)
- 菜鸟的又一小小分享--关于用户控件中图片地址路径的问题
- 关于Java文件路径问题
- 关于showModalDialog和showModelessDialog路径问题
- 关于VFP报表输出时是否有打印设置问题的解决
- 关于Java文件路径问题
- 关于JSP文件路径问题 (转)
- C#写的计数器控件 - 一个关于相对路径使用的问题
- 关于Java文件路径问题
- Spring的XML解析中关于DTD的路径问题-
- 关于web.config的数据库连接的相对路径的问题
- 关于Java文件路径问题