Floyd模板
求多对最短路问题,问题很显然效率慢。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<stack> #include<stdlib.h> #include<map> #include<vector> #include<queue> #include<set> #include<ctype.h> #define zuida 100000 const int INF=1e9; using namespace std; #define maxn 2005 int mapp[maxn][maxn]; int n,m; void init() { for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) mapp[i][j]=INF; } int main() { cin>>n>>m; for(int i=1;i<=m;i++) { int a,b,c; cin>>a>>b>>c; mapp[a][b]=c; mapp[b][a]=c; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) mapp[i][j]=min(mapp[i][j],mapp[i][k]+mapp[k][j]); for(int i=1;i<=n;i++) { int x,y; cin>>x>>y; cout<<mapp[x][y]<<endl; } return 0; }
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<stack> #include<stdlib.h> #include<map> #include<vector> #include<queue> #include<set> #include<ctype.h> #define zuida 100000 const int INF=1e9; using namespace std; #define maxn 2005 int mapp[maxn][maxn]; int n,m; void init() { for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) mapp[i][j]=INF; } int main() { cin>>n>>m; for(int i=1;i<=m;i++) { int a,b,c; cin>>a>>b>>c; mapp[a][b]=c; mapp[b][a]=c; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) mapp[i][j]=min(mapp[i][j],mapp[i][k]+mapp[k][j]); for(int i=1;i<=n;i++) { int x,y; cin>>x>>y; cout<<mapp[x][y]<<endl; } return 0; }