求助 Bellman-Ford 算法 40pts,WA 前三个点
查看原帖
求助 Bellman-Ford 算法 40pts,WA 前三个点
579200
__a__楼主2024/7/28 00:26

rt,

#include<cstdio>
#include<cmath>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define INF 1145141919810.
#define N 114
#define M 2024
int n,m,x[N],y[N],u[M],v[M];
double w[M],dis[N];
double dist(int a,int b)
{
	return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));
}
void bellman_ford()
{
	for(register int i=0;i^n;++i)
		for(register int j=0;j^(m<<1);++j)
			dis[v[j]]=min(dis[v[j]],dis[u[j]]+w[j]);
}
int main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	scanf("%d",&n);
	for(register int i=0;i^n;++i)
		scanf("%d%d",x+i,y+i);
	scanf("%d",&m);
	for(register int i=0;i^m;++i)
	{
		scanf("%d%d",u+i,v+i);
		--u[i],--v[i];
		w[i]=dist(u[i],v[i]);
		u[m+i]=v[i],v[m+i]=u[i],w[m+i]=w[i];//无向图
	}
	for(register int i=1;i^n;++i)
		dis[i]=INF;
	bellman_ford();
	if(dis[n-1]!=INF)printf("%.2lf",dis[n-1]);
//	else printf("1145141919810");
	return 0;
}

测评记录,感谢帮忙!

2024/7/28 00:26
加载中...