#include<bits/stdc++.h>
using namespace std;
float dis[1005][1005],c[1005],x[1005],y[1005],d,r;
bool f[1005],vis[1005][1005];
float dq(int i,int j)
{
return sqrt(abs(x[i]-x[j])*abs(x[i]-x[j])+abs(y[i]-y[j])*abs(y[i]-y[j]));
}
int main()
{
int n;cin>>d>>r>>n;
for (int i=1;i<=n;++i)
{
cin>>x[i]>>y[i];
}
int a,b;
while(cin>>a>>b&&!(a==0&&b==0))
{
vis[a][b]=vis[b][a]=1;
dis[a][b]=dis[b][a]=r*dq(a,b);
}
cin>>x[0]>>y[0]>>x[n+1]>>y[n+1];
for (int i=0;i<=n+1;++i)
{
for (int j=0;j<=n+1;++j)
{
if (!vis[i][j])
dis[i][j]=d*dq(i,j);
}
}
c[0]=0;
f[0]=1;
for (int i=1;i<=n+1;++i) c[i]=0x3f3f3f;
for (int i=1;i<=n+1;++i)
{
if (dis[0][i]) c[i]=dis[0][i];
}
for (int i=0;i<=n+1;++i)
{
int k,minn=0x3f3f3f;
for (int j=0;j<=n+1;++j)
{
if (!f[j]&&c[j]<minn)
{
k=i;
minn=c[j];
}
}
f[k]=1;
for (int j=0;j<=n+1;++j)
{
if (c[k]+dis[k][j]<c[j])
{
c[j]=c[k]+dis[k][j];
}
}
}
for (int i=0;i<=n+1;++i)
{
for (int j=0;j<=n+1;++j)
{
printf("%0.4f",dis[i][j]);
cout<<' ';
}
cout<<endl;
}
printf("%0.4f",c[n+1]);
return 0;
}
样例过了,0分