图论--最短路--Floyd(含路径输出)
2024-09-07 11:40:33
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define maxn 1005
int D[maxn][maxn];
int P[maxn][maxn];
int N,M; //顶点数边数
int S,E; //起点终点
void Floyd()
{
for(int k=1;k<=N;k++)
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
{
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];
}
}
}
int main()
{
//init
memset(D,0x3f,sizeof(D));
memset(P,0x3f,sizeof(P));
//录入图
cin>>N>>M;
for(int i=1;i<=M;i++)
{
int u,v,cost;
cin>>u>>v>>cost;
if(cost<D[u][v]) //D的初始化为边的信息
{
D[u][v]=cost;
//D[v][u]=cost;//无向图
}
}
for(int i=1;i<=N;i++) //初始化P
for(int j=1;j<=N;j++)
{
if(i!=j&&D[i][j]!=INF) //P第0层为i
P[i][j]=i;
}
cin>>S>>E;
//
Floyd();
//最短距离
cout<<D[S][E]<<endl;
//路径回溯
int temp=P[S][E];
cout<<E;
while(true)
{
if(temp==S)
{
cout<<"<--"<<S<<endl;
break;
}
cout<<"<-"<<P[S][temp];
temp=P[S][temp];
}
}
最新文章
- 基于SSM的租赁管理系统0.3_20161225_数据库设计
- MVVM架构~knockoutjs系列之扩展ajax验证~验证输入数据是否与后台数据相等
- Install Docker on Mac OS X(转)
- 【JSON 注解】JSON循环引用2----JSON注解@JsonIgnoreProperties+JAVA关键字transient+后台对象与JSON数据的格式互相转化
- 关于NSDate和NSDateFormatter的几个常用方法
- aspcms网站访问出现3706错误, 错误描述:未找到提供程序。该程序可能未正确安装,解决的方法。
- Redis-sentinel监控
- Android后门GhostCtrl,完美控制设备任意权限并窃取用户数据
- Java-SSM框架页面时间格式转换
- 19、Squid代理服务器
- Python threading中lock的使用
- shell正常运行,加入定时任务执行失败
- select min from 连接
- Centos7下python3安装pip-9.0.1
- requestFeature() must be called before adding content产生原因和解决办法
- 基于jQuery和CSS3超酷Material Design风格滑动菜单导航特效
- 登录使用inode的校园网用到的url
- Poj 1401 Factorial(计算N!尾数0的个数——质因数分解)
- LOJ#2304. 「NOI2017」泳池
- pycharm上传代码到码云(详细)