题目链接
Floyd
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <cstring>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <stack>
#include <algorithm>
#define ll long long
using namespace std;
const int inf = 0x3f3f3f;
int value[550][550];
int G[550][550];
int main()
{
ios::sync_with_stdio(false);
int n,m,s,d;
cin>>n>>m>>s>>d;
int c1,c2,len,val;
memset(G,inf,sizeof(G));
memset(value,inf,sizeof(value));
for(int i=1; i<=m; i++)
{
cin>>c1>>c2>>len>>val;
G[c1][c2] = G[c2][c1] = len;
value[c1][c2] = value[c2][c1] = val;
}
for(int k=0; k<n; k++)
{
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
if(G[i][k]+G[k][j]<G[i][j])
{
G[i][j] = G[i][k] + G[k][j];
value[i][j] = value[i][k]+value[k][j];
}
else if(G[i][k]+G[k][j]==G[i][j])
{
if(value[i][k]+value[k][j]<value[i][j])
{
value[i][j] = value[i][k]+value[k][j];
}
}
}
}
}
cout<<G[s][d]<<' '<<value[s][d]<<endl;
return 0;
}
Dijkstra
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <cstring>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <stack>
#include <algorithm>
#define ll long long
using namespace std;
const int inf = 0x3f3f3f3f;
using namespace std;
int g[550][550];
int val[550][550];
int vis[550],dist[550];
int ans_v[550];
int n,m,s,d;
int u,v,dis,x;
void dijkstra(int u)
{
memset(vis,0,sizeof(vis));
for(int i=0; i<n; i++)
{
dist[i] = g[u][i];
}
vis[u] = 1;
for(int i=0; i<n; i++)
{
int minn = inf,t;
for(int j=0; j<n; j++)
{
if(!vis[j]&&dist[j]<minn)
{
minn = dist[j];
t = j;
}
}
vis[t] = 1;
for(int j=0; j<n; j++)
{
if(g[t][j]+dist[t]<dist[j])
{
dist[j] = g[t][j]+dist[t];
val[u][j] = val[t][j]+val[u][t];
}
else if(g[t][j]+dist[t]==dist[j])
{
val[u][j]=min(val[u][j],val[t][j]+val[u][t]);
}
}
}
cout<<dist[d]<<' '<<val[u][d]<<endl;
}
int main()
{
cin>>n>>m>>s>>d;
memset(g,inf,sizeof(g));
memset(val,inf,sizeof(val));
for(int i=0; i<n; i++)
{
g[i][i] = 0;
}
for(int i=1; i<=m; i++)
{
cin>>u>>v>>dis>>x;
g[v][u] = g[u][v] = dis;
val[v][u] = val[u][v] = x;
}
dijkstra(s);
return 0;
}