#include<iostream> #include<algorithm> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> using namespace std; int map[1000][1000]; int main() { int n,m,i,j,k; cin>>n>>m; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(i==j) map[i][j]=0; else map[i][j]=99999999; } for(i=1;i<=m;i++) { int x,y,z; cin>>x>>y>>z; map[x][y]=z; } for(i=1;i<=n;i++) for(j=1;j<=n;j++) for(k=1;k<=n;k++) map[j][k]=min(map[j][k],map[j][i]+map[i][k]); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cout<<map[i][j]; if(j!=n) cout<<" "; } cout<<endl; } //system("pause"); return 0; }
这是Floyd O(n^3)
#include<iostream> #include<algorithm> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> using namespace std; int map[1000][1000],dis[10000],book[10000]; int main() { int n,m; cin>>n>>m; int i,j,k; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(i==j) map[i][j]=0; else map[i][j]=99999999; } while(m--) { int x,y,z; cin>>x>>y>>z; map[x][y]=z; } for(i=1;i<=n;i++) { dis[i]=map[1][i]; } book[1]=1; for(i=1;i<=n;i++) { int u; int minn=99999999; for(j=1;j<=n;j++) { if(dis[j]<minn&&book[j]==0) { minn=dis[j]; u=j; } } book[u]=1; for(j=2;j<=n;j++) { if(dis[j]>dis[u]+map[u][j]) dis[j]=dis[u]+map[u][j]; } } for(i=1;i<=n;i++) { cout<<dis[i]; if(i!=n) cout<<" "; } //system("pause"); return 0; }
这是Dijkstra
#include<iostream> #include<algorithm> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> using namespace std; int x[1000],y[1000],z[1000]; int dis[1000]; int main() { int n,m; cin>>n>>m; int i,j,k; for(i=1;i<=m;i++) { cin>>x[i]>>y[i]>>z[i]; } for(i=1;i<=n;i++) dis[i]=99999999; dis[1]=0; for(i=1;i<=n-1;i++) { for(j=1;j<=m;j++) { if(dis[y[j]]>dis[x[j]]+z[j]); dis[y[j]]=dis[x[j]]+z[j]; } } for(i=1;i<=n;i++) { cout<<dis[i]; if(i!=n) cout<<" "; } //system("pause"); return 0; }
这是Bellman-ford