社区讨论

仔细看了很多遍,这明摆的没什么问题,样例也过了,为什么前三点是WA

P1744采购特价商品参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo2f19j3
此快照首次捕获于
2023/10/23 12:46
2 年前
此快照最后确认于
2023/11/18 21:55
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
struct edge{
	int to;
	double w;
};
double distan(int x1,int y1,int x2,int y2)
{
	double a1=abs(x1-x2);
	double a2=abs(y1-y2);
	return sqrt(a1*a1+a2*a2);
}
int n,m,s,t;
int x[110],y[110];
vector<edge> a[110];
double dis[110];
bool book[110];
signed main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
    	scanf("%d%d",&x[i],&y[i]);
	}
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		a[u].push_back(edge{v,distan(x[u],y[u],x[v],y[v])});
		a[v].push_back(edge{u,distan(x[u],y[u],x[v],y[v])});
	}
	cin>>s>>t;
	for(int i=1;i<s;i++) dis[i]=1e9;
	for(int i=s+1;i<=n;i++) dis[i]=1e9;
	queue<int> q;
	q.push(1);
	book[1]=1;
	while(!q.empty())
	{
		int v=q.front();
		q.pop();
		book[v]=0;
		for(int i=0;i<a[v].size();i++)
		{
			int u=a[v][i].to;
			if(dis[u]>dis[v]+a[v][i].w)
			{
				dis[u]=dis[v]+a[v][i].w;
				if(!book[u])
				{
					book[u]=1;
					q.push(u);
				}
			}
		}
	}
	printf("%.2lf",dis[t]);
    return 0;
}
求助

回复

3 条回复,欢迎继续交流。

正在加载回复...