时间限制: 1 s
空间限制: 32000 KB
题目等级 : 黄金 Gold
 
题目描述 Description

平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。现在的任务是找出从一点到另一点之间的最短路径。

输入描述 Input Description

第一行为整数n。

第2行到第n+1行(共n行),每行两个整数x和y,描述了一个点的坐标。

第n+2行为一个整数m,表示图中连线的个数。

此后的m行,每行描述一条连线,由两个整数i和j组成,表示第i个点和第j个点之间有连线。

最后一行:两个整数s和t,分别表示源点和目标点。

输出描述 Output Description

仅一行,一个实数(保留两位小数),表示从s到t的最短路径长度。

样例输入 Sample Input

5

0 0

2 0

2 2

0 2

3 1

5

1 2

1 3

1 4

2 5

3 5

1 5

样例输出 Sample Output

3.41

数据范围及提示 Data Size & Hint

Floyd

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#define maxn 100000007 using namespace std; int n,m,s,t,d1,d2;
struct node
{
double x,y;
}a[];
double dis[][]; int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
dis[i][j]=maxn;
for(int i=;i<=n;i++)
cin>>a[i].x>>a[i].y;
scanf("%d",&m);
for(int i=;i<=m;i++)
{
scanf("%d%d",&d1,&d2);
dis[d1][d2]=dis[d2][d1]=sqrt((a[d1].x-a[d2].x)*(a[d1].x-a[d2].x)+(a[d1].y-a[d2].y)*(a[d1].y-a[d2].y));
}
scanf("%d%d",&s,&t); for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(i!=j&&j!=k&&i!=k&&dis[i][j]>dis[i][k]+dis[k][j])
dis[i][j]=dis[i][k]+dis[k][j];
}
printf("%.2lf",dis[s][t]);
return ;
}
Dijkstra
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
#define maxn 10000007 using namespace std; int n,m,d1,d2,s,t;
struct node
{
double x,y;
}a[];
double c[],dis[][],minl;
bool boo[]; int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
dis[i][j]=c[i]=maxn;
for(int i=;i<=n;i++)
cin>>a[i].x>>a[i].y;
scanf("%d",&m);
for(int i=;i<=m;i++)
{
scanf("%d%d",&d1,&d2);
dis[d1][d2]=dis[d2][d1]=sqrt((a[d1].x-a[d2].x)*(a[d1].x-a[d2].x)+(a[d1].y-a[d2].y)*(a[d1].y-a[d2].y));
}
scanf("%d%d",&s,&t);
for(int i=;i<=n;i++)
c[i]=dis[s][i];
c[s]=;
boo[s]=true;
for(int i=;i<n;i++)
{
minl=maxn;
int k=;
for(int j=;j<=n;j++)
if(!boo[j]&&c[j]<minl)
{
minl=c[j];
k=j;
}
if(k==) break;
boo[k]=true;
for(int j=;j<=n;j++)
if(c[k]+dis[k][j]<c[j])
c[j]=c[k]+dis[k][j];
}
printf("%.2lf",c[t]);
return ;
}

T2602 最短路径问题 codevs的更多相关文章

  1. codevs 2602 最短路径问题——良心题解

    2602 最短路径问题 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在- ...

  2. Codevs 2602 最短路径问题

     时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间. ...

  3. codevs 2602 最短路径问题x

                         题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间.其中的一些点之间有连线.若有连线,则表示 ...

  4. codevs 2594 解药还是毒药

    2594 解药还是毒药 http://codevs.cn/problem/2594/ 题目描述 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原 ...

  5. Codevs 1021 (玛丽卡)

    题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们 ...

  6. T1405 奶牛的旅行 codevs

    http://codevs.cn/problem/1405/ 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 农民John的农场 ...

  7. [codevs 1482]路线统计(矩阵乘法)

    题目:http://codevs.cn/problem/1482/ 分析:很像“经过K条边的最短路径条数”.但有所不同,那就是不是边数固定,而是路径总长度固定.看似不能用矩阵乘法了……但注意到每条边的 ...

  8. [codevs 1183][泥泞的道路(二分+spfa)

    题目:http://dev.codevs.cn/problem/1183/ 分析:这个和最优比率生成树很像,都可以二分答案的,只不过判定方面一个是求是否有最短路径,一个是求是否有生成树.假设等待判定的 ...

  9. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

随机推荐

  1. word转HTML在layuiadmin中锚点调转问题

    前言: 在以前我们讲过把word转成HTML移植入自己的web项目使用:Word转html并移植到web项目 正文: 发现如果在layuiadmin框架中,页面里锚点跳转时会不正常(会跳转到新页面): ...

  2. 连接器前置挂载U盾

    连接器前置挂载U盾 1. 宿主机配置及其信息 虚拟化软件版本 主机名 宿主机IP 账号及其密码 WorkStation windows idca- vm01 172.16.6.30 * Qemu-kv ...

  3. Pomodoro APP

    2015.5.23 UITableView 的数据源刷新问题 本次发过来的版本五,实现了活动清单列表(AllEventsTableViewController).活动详情(AllEventsViewC ...

  4. CF547D Mike and Fish 建图

    题意: 有点长→CF547DMike and Fish. 分析: 其实也没什么好分析的,我这也是看的题解. (不过,那篇题解好像文字的代码不太对劲) 这里直接说做法,正确性自证: 对输入的,将横.纵坐 ...

  5. Hanoi双塔问题

    题目描述: 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形).现要将这些圆盘移到C柱上 ...

  6. win32应用程序和win32控制台应用程序的区别

          win32应用程序是有窗体的(当然也可以没有),有Windows消息循环机制的.而win32控制台应用程序只是在控制台下运行的程序,类似以前dos的程序. 后续答案: Win32 Appl ...

  7. Makefile学习(一)----初步理解

    一.我对makefile的理解: 经过一段时间对makefile的学习,我理解的makefile就是将程序员手动编译源文件的过程用一个脚本执行,这对于小型项目来说,程序员手动执行和用makefile来 ...

  8. PAT Basic 1059

    1059 C语言竞赛 C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛.既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽: 0.冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……). ...

  9. CentOS下,mysql服务启动失败

    mysql服务启动失败,可以使用排除法查找原因: 如果修改了my.cnf后重启mysql服务失败,大多数情况下都是配置文件有错误, 可以通过备份原来的配置文件,然后将配置文件清空,只剩下[mysqld ...

  10. numpy hstack()

    numpy.hstack(tup)[source] Stack arrays in sequence horizontally (column wise). Take a sequence of ar ...