您的位置:首页 > 编程语言 > Go语言

toj2134 106 miles to Chicago

2013-09-16 16:50 253 查看
题目链接:http://acm.tju.edu.cn/toj/showp2134.html

题目大意:从一个顶点到另一个顶点的概率最大(相比于dijkstra而言,由路径和最小,变成概率最大),稍作改变就行,一个意思。

思路:dijkstra, 记在这儿是为了当模板用的 -  -! (1 A)

代码:

#include <iostream>

#include <cstring>

#include <cstdio>

#include <cstdlib>

#include <iomanip>

using namespace std;

double map[101][101];

double dist[101];

int visited[101];

int n;

double dij()

{

    int i,j;

    for(i=1;i<=n;i++)

    dist[i] = map[1][i];

    visited[1] = 1;

    for(i=1;i<=n-1;i++)

    {

       double max = 0;

       int pos;

       for(j=1;j<=n;j++)

       {

         if(!visited[j] && dist[j]>max)

         {

          max = dist[j];

          pos = j;

         }

       }

       visited[pos] = 1;

       for(j=1;j<=n;j++)

       {

          if(!visited[j]&& dist[pos]*map[pos][j]>dist[j])

          dist[j]=dist[pos]*map[pos][j];

       }  

    }

    return dist
;

}

int main()

{

    int i,j,k,m,a,b;

    double c;

    while(cin>>n && n)

    {

      cin>>m;

      for(i=1;i<=n;i++)

      for(j=1;j<=n;j++)

      {

         if(i==j)

         map[i][j] =1;

         else

         map[i][j] = 0;

      }

      for(i=0;i<m;i++)

      {

        cin>>a>>b>>c;

        map[a][b]=map[b][a] = c/100;

      }

      memset(visited,0,sizeof(visited));

      cout<<fixed<<setprecision(6);

      cout<<dij()*100<<" percent"<<endl;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM 最短路径