最短路算法
#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
蒟蒻总是更懂你✿✿ヽ(°▽°)ノ✿

浙公网安备 33010602011771号