zoukankan      html  css  js  c++  java
  • POJ 1502( dijkstra)

           这个题好像有点长,不过意思很简单。

           就是第一个processor向和它相邻的processor发送消息,那么接收到消息的processor就可以向和它们相邻的processor发送消息。求所有processor都接受到消息所需的最短的时间。从数据结构来考虑,就是最短路了。求第一个点到其余各点最短路径的最大值(因为其余点时间比最大值小,故可以接收到消息,消息是同时发送的)。

    代码:

     1 #include<iostream>
    2 #include<cstdlib>
    3 #include<cstring>
    4 #define max 0x7fffffff
    5 using namespace std;
    6
    7 int p[101][101];
    8 int dis[101];
    9 bool flag[101];
    10 int dijkstra(int n);
    11
    12 int main()
    13 {
    14 int i,j,n;
    15 char ch[20];
    16 cin>>n;
    17 for(i = 1 ; i < n ; ++i)//只输入下三角(并且不包括那个对角线)
    18 for(j = 0 ; j < i ; ++j)
    19 {
    20 cin>>ch;
    21 if(ch[0] == 'x')//不可达
    22 p[i][j] = p[j][i] = max;
    23 else
    24 p[i][j] = p[j][i] = atoi(ch);//将字符串转换为int
    25 }
    26 for(i = 0 ; i < n ; ++i)
    27 p[i][i] = 0;//自己到自己为0
    28 memset(flag,false,sizeof(flag));//初始,最短路径集合里没元素
    29 printf("%d\n",dijkstra(n));
    30
    31 // system("pause");
    32 return 0;
    33 }
    34
    35 int dijkstra(int n)
    36 {
    37 int u,i,j,tdis,newdis;
    38 for(i = 0 ; i < n; ++i)//起点是第一个processor
    39 dis[i] = p[0][i];
    40 flag[0] = true;//将起点加入最短路径集合
    41
    42 for(j = 1 ; j < n ; ++j)//还有n-1个点未加入最短路径集合
    43 {
    44 tdis = max;
    45 for(i = 0 ; i < n ; ++i)//寻找下一个应该进入最短路径集合的processor
    46 {
    47 if( !flag[i] && dis[i] < tdis)
    48 {
    49 u = i ; tdis = dis[i];
    50 }
    51
    52 }//for(i)
    53
    54 flag[u] = true;//进入最短路径集合
    55
    56 for(i = 0 ; i < n ; ++i)//根据新加入的那个点更新其余点的最短路径
    57 {
    58 if( !flag[i] && p[u][i] != max)
    59 {
    60 newdis = dis[u] + p[u][i];
    61 if(newdis < dis[i])
    62 dis[i] = newdis;
    63 }
    64
    65 }
    66
    67 }//for(j)
    68 tdis = 0 ;
    69 for(i = 1 ; i < n ; ++i)//找出最大值
    70 if(dis[i] > tdis)
    71 tdis = dis[i];
    72
    73 return tdis;
    74 }
  • 相关阅读:
    124. 二叉树中的最大路径和
    快速排序,归并排序
    剑指offer ——重建二叉树
    共享指针的简单实现
    string_自定义
    幸运的袋子
    动态规划——出差问题
    计算数组平均值
    时间格式化并算差值
    适配器模式
  • 原文地址:https://www.cnblogs.com/HpuAcmer/p/2300937.html
Copyright © 2011-2022 走看看