直接上代码
未完待续……
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f3f3f3f3f;
ll n,m,e[1005][1005],x,y;
int Floyd(ll x,ll y){
int dp[1005][1005];
for(int i=1;i<=1005;i++){
for(int j=1;j<=1005;j++){
dp[i][j]=e[i][j];
}
}
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
}
}
}
return dp[x][y];
}
int Dijkstra(ll u,ll t){
ll dis[1005];
bool vis[1005];
for(int i=1;i<=n;i++)dis[i]=e[u][i];
vis[u]=true;
for(int i=1;i<n;i++){
ll Min=0x3f3f3f3f3f3f3f3f,T=0;
for(int j=1;j<=n;j++){
if(!vis[j]&&dis[j]<Min){
Min=dis[j];
T=j;
}
}
vis[T]=true;
for(int j=1;j<=n;j++){
if(e[T][j]+dis[T]<dis[j]){
dis[j]=e[T][j]+dis[T];
}
}
}
return dis[t];
}
int main(){
memset(e,inf,sizeof(e));
cin>>n>>m;
for(int i=1;i<=n;i++)e[i][i]=0;
for(int i=1;i<=m;i++){
ll a,b,c;
cin>>a>>b>>c;
e[a][b]=c;
e[i][i]=0;
}
ll ans1=Floyd(x,y);
ll ans2=Dijkstra(x,y);
return 0;
}