听取WA声一片
  • 板块P1907 设计道路
  • 楼主B1ade_
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/9/12 14:02
  • 上次更新2023/11/5 13:21:31
查看原帖
听取WA声一片
158878
B1ade_楼主2020/9/12 14:02
#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分

2020/9/12 14:02
加载中...