Ruta más corta: POJ2253 - Frogger (SPFA)

Ruta más corta: POJ2253 — Frogger (SPFA)

Fuente del tema:

https://vjudge.net/problem/POJ-2253

Tema:

Una pequeña rana en una piedra Freddy quiere ver a otra pequeña rana de piedra, Fiona, pero el río está demasiado sucio, por lo que la pequeña rana necesita saltar sobre la piedra para encontrarse con el amor.
Ahora dale n puntos, el primer punto son las coordenadas de Freddy, el segundo punto son las coordenadas de Fiona y los puntos n-2 restantes son otras piedras.
Pregúntale a la rana Freddy cuál es el rango mínimo de salto para encontrar a la rana Fiona

Solución:

Simplemente almacene la distancia en la matriz de adyacencia y use SPFA.

Código AC:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define PI cos(-1)
const int maxn = 1010;
struct node
{
	int x,y;
}p[maxn];
double a[maxn][maxn],dis[maxn];
int vis[maxn];
void SPFA(int n)
{
	queue<int> q;
	for(int i=1;i<n;i++)
	{
		dis[i] = INF;
		vis[i] = 0;
	}
	dis[0] = 0;
	q.push(0);
	vis[0] = 1;
	while(!q.empty())
	{
		int tmp = q.front();
		q.pop();
		vis[tmp] = 0;
		for(int j=0;j<n;j++)
		{
			if(dis[j]>max(dis[tmp],a[tmp][j]))
			{
				dis[j] = max(dis[tmp],a[tmp][j]);
				if(!vis[j])
				{
					q.push(j);
					vis[j] = 1;
				}
			}
		}
	}
}
int main()
{
	int n,cas=1;
	while(~scanf("%d",&n))
	{
		if(n==0) break;
		for(int i=0; i<n; i++)
		{
			scanf("%d %d",&p[i].x,&p[i].y);
		}
		for(int j=0; j<n; j++)
		{
			for(int i=0; i<=j; i++)
			{
				a[j][i] = sqrt(1.0*(p[j].x-p[i].x)*(p[j].x-p[i].x)+1.0*(p[j].y-p[i].y)*(p[j].y-p[i].y));
				a[i][j] = sqrt(1.0*(p[j].x-p[i].x)*(p[j].x-p[i].x)+1.0*(p[j].y-p[i].y)*(p[j].y-p[i].y));
			}
		}
		SPFA(n);
		printf("Scenario #%d\nFrog Distance = %.3f\n\n",cas++,dis[1]);
	}
	return 0;
}
Publicado 51 artículos originales · alabanza ganado 16 · vistas 3365

Supongo que te gusta

Origin blog.csdn.net/weixin_43911945/article/details/102976242
Recomendado
Clasificación