xynuoj 1594 最短路径问题

16人阅读 评论(0) 收藏 举报
分类:

给你几个点,以及点和点之间是否链接,求出起点到终点的距离。

注意距离是浮点数。。。

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
#define INF 0x3f3f3f3f
#define MAXN 150//只有100个点,数大了会错。。。
int n,m;

double map[MAXN][MAXN];
struct Point{
	double x,y;
}point[MAXN];

double  dis(Point a,Point b){
	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double dist[MAXN];
int vis[MAXN];
void dijkstra(int st){
	
	for(int i=1;i<=n;i++){
		dist[i]=map[st][i];
		vis[i]=0;
	}
	vis[st]=1;
	dist[st]=0.0;
	
	for(int i=1;i<n;i++){
		double minn=INF;
		int u=-1;
		for(int j=1;j<=n;j++){
			
			if(dist[j]<minn&&!vis[j]){
				u=j;
				minn=dist[j];
			}
			
		}
		if(u==-1)
		return ;
		vis[u]=1;
		
		for(int k=1;k<=n;k++){
			if(!vis[k]&&dist[k]>dist[u]+map[u][k])
			dist[k]=dist[u]+map[u][k];
		}
	}
	
	
}
int main(){
	
	while(scanf("%d",&n)!=EOF){
		
		for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
		map[i][j]=(i==j?0:INF);
		
		for(int i=1;i<=n;i++){
			scanf("%lf%lf",&point[i].x,&point[i].y);
		}
		
		scanf("%d",&m);
		for(int i=0;i<m;i++){
			int st,ed;
			scanf("%d%d",&st,&ed);
			map[st][ed]=map[ed][st]=dis(point[st],point[ed]);
		}
		
//		for(int i=1;i<=n;i++){
//		for(int j=1;j<=n;j++)
//		printf("%lf  ",map[i][j]);	
//		puts("");
//		}
//	 
		int st,ed;
		scanf("%d%d",&st,&ed);
		
		dijkstra(st);
		printf("%.2lf\n",dist[ed]);
		
	}
	
	
	
	return 0;
}

查看评论

XYNUOJ 1256 喷水装置(一)—贪心算法

1256: 喷水装置(一) 时间限制: 3 Sec  内存限制: 128 MB 提交: 9  解决: 8 [提交][状态][讨论版][Edit] [TestData] 题目描述 现有一块草坪,长...
  • LiuJiuXiaoShiTou
  • LiuJiuXiaoShiTou
  • 2017-08-01 07:11:28
  • 700

[51nod1594]Gcd and Phi

题目大意给定一个数n,求∑ni=1∑nj=1ϕ(ϕi,ϕj)\sum_{i=1}^n \sum_{j=1}^n \phi(\phi i,\phi j)n≤2∗1062*10^6 数据组数不超过5分析...
  • WorldWide_D
  • WorldWide_D
  • 2016-12-01 22:17:56
  • 559

UVa1594

UVa-1594 分析:这个题其实是有漏洞的,数据太水,开始我遍历500次便结束输出LOOP,AC了,然而去翻了翻大神的博客,竟然 只需200次便可,这个题简直水的可以。这个题基本...
  • qq_32036091
  • qq_32036091
  • 2015-12-06 22:10:23
  • 1205

c++中关于最短路径问题的Dijkstra算法的实现

c++中关于最短路径问题的Dijkstra算法的实现,写得不好的请指正,火速修改
  • play_841266670
  • play_841266670
  • 2017-06-06 20:05:46
  • 563

POJ-3984迷宫问题(典型BFS找最短路径)

定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, ...
  • jxjyjx5
  • jxjyjx5
  • 2016-12-26 20:45:59
  • 749

最短路径问题(Dijkstra解法)

算法分类: 贪心 算法原理: 设置一个顶点的集合s,并不断地扩充这个集合,一个顶点属于集合s当且仅当从源点到该点的路径已求出。开始时s中仅有源点,并且调整非s中点的最短路径长度,...
  • jokes000
  • jokes000
  • 2012-04-29 19:49:17
  • 6358

最短路径问题 hdu acm c++

最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S...
  • u012938194
  • u012938194
  • 2014-08-18 14:37:37
  • 552

UVa 1594 - Ducci Sequence【模拟】

原文网址: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&probl...
  • liuke19950717
  • liuke19950717
  • 2015-12-10 20:13:34
  • 521

【C语言】街区最短路径问题解题思路

描述 一个街区有很多住户,街区的街道只能为东西、南北两种方向。 住户只可以沿着街道行走。 各个街道之间的间隔相等。 用(x,y)来表示住户坐在的街区。 例如(4,20),表示用...
  • haonanren2bu2
  • haonanren2bu2
  • 2014-04-17 11:44:33
  • 2268

简单编程题目连载(八)——最短路径问题

最短路径
  • WDZTSXCDH
  • WDZTSXCDH
  • 2017-01-18 16:37:13
  • 974
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 2614
    排名: 1万+