POJ 2253

该博客通过Frogger游戏为背景,介绍了一种求解两点间最远跳跃距离的最短路径算法。文章利用了Dijkstra's SPFA(Shortest Path Faster Algorithm)算法,并给出了C++实现。代码中计算了每个节点到目标节点的最大跳跃距离,并输出了最小的最大跳跃距离。内容涉及图论、最短路径问题和距离计算。
摘要由CSDN通过智能技术生成

Frogger

从 点 1 到点 2 有多条路径,每条路径有个 最远跳跃距离,问这些最远跳跃距离中 最小的值是多少

Code

#include <cmath>
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

typedef pair<int,int> PII;

const int N=310;

PII p[N];
bool st[N];
double dist[N];
double g[N][N];
int n;

int pf(int x){
	return x*x;
}


double spfa(){	
	for(int i=1;i<=n;i++) dist[i]=1e9;
	memset(st,false,sizeof st);	
	dist[1]=0;
		
	queue<int>q;
	q.push(1);
	st[1]=true;

	while(q.size()){
		int t=q.front();
		q.pop();
		st[t]=false;
		
		for(int i=1;i<=n;i++)		
			if(dist[i]>max(dist[t],g[t][i])){
				dist[i]=min(dist[i],max(dist[t],g[t][i]));
				if(!st[i]) st[i]=true,q.push(i);
			}		
	}

	return dist[2];
}


int main(){
	int t=1;
	while(cin>>n&&n){
		for(int i=1;i<=n;i++) cin>>p[i].first>>p[i].second;
		
		for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) {
			int x1=p[i].first,y1=p[i].second;
			int x2=p[j].first,y2=p[j].second;
			g[i][j]=g[j][i]=sqrt(pf(x1-x2)+pf(y1-y2));
		}
		
		cout<<"Scenario #"<<t<<endl;
		printf("Frog Distance = %.3f\n\n",spfa());
		t++;
	}
	
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值