• 2602 最短路径问题


    题目描述 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

     
     
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 using namespace std;
     6 struct node
     7 {
     8     double x;
     9     double y;
    10     double cd;
    11 }a[1001];
    12 double map[101][101];
    13 double maxn=127;
    14 int main()
    15 {
    16     memset(map,maxn,sizeof(map));
    17     int n;
    18     scanf("%d",&n);
    19     for(int i=1;i<=n;i++)
    20     {
    21         scanf("%lf%lf",&a[i].x,&a[i].y);
    22         //a[i].cd=sqrt((pow(abs(x),2))+(pow(abs(y),2)));
    23     }
    24     int m;
    25     scanf("%d",&m);
    26     for(int i=1;i<=m;i++)
    27     {
    28         int p,q;
    29         scanf("%d%d",&p,&q);
    30         double y=sqrt(pow(a[p].x-a[q].x,2)+pow(a[p].y-a[q].y,2));
    31         map[p][q]=y; 
    32         map[q][p]=y;
    33     }
    34     for(int k=1;k<=n;k++)
    35     {
    36         for(int i=1;i<=n;i++)
    37         {
    38             for(int j=1;j<=n;j++)
    39             {
    40                 if(map[i][j]>map[i][k]+map[k][j])
    41                 map[i][j]=map[i][k]+map[k][j];
    42             }
    43         }
    44     }
    45     int u,v;
    46     scanf("%d%d",&u,&v);
    47     printf("%.2lf",map[u][v]);
    48     return 0;
    49 }
  • 相关阅读:
    Linux Linux程序练习九
    Linux 进程与线程四(加锁--解锁)
    Linux 进程与线程三(线程比较--创建线程参数)
    Linux 进程与线程二(等待--分离--取消线程)
    Linux 进程与线程一(创建-关闭线程)
    python值传递和指针传递
    Django-Model操作数据库(增删改查、连表结构)
    django model 插入数据方法
    jQuery ajax()使用serialize()提交form数据
    python版 google密码认证器
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/6685690.html
Copyright © 2020-2023  润新知