程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Hoj 2047 106 miles to Chicago

Hoj 2047 106 miles to Chicago

編輯:C++入門知識

Dijkstra. 只不過是把原先的普遍的最短單源路徑當作最大單源路徑來求。且運算符是乘法而不是加法。用Double來存儲,細節部分需要雕琢一下再提交。 題目:  #include <iostream>   #include <stdio.h>   #include <string.h>   #include <queue>   #include <math.h>   #include <algorithm>      using namespace std;      double map[102][102];   double dist[102];   int visited[102];      int main()   {      #ifndef ONLINE_JUDGE       freopen("in.txt","r",stdin);   #endif       int n,m;       while(scanf(" %d %d",&n,&m) == 2)       {           memset(map,0,sizeof(map));           for(int i=0; i<m; i++)           {               int a,b;               double p;               scanf(" %d %d %lf",&a,&b,&p);               map[a-1][b-1] = map[b-1][a-1] = p;           }           for(int i=0; i<n; i++)           {               map[i][i] = 100;           }              memset(dist,0,sizeof(dist));           memset(visited,0,sizeof(visited));              dist[0] = 100;           for(int i=0; i<n; i++)           {               double max = 0;               int k = 0;               for(int j=0; j<n; j++)               {                   if(visited[j] == 0 && dist[j]>max)                   {                       max = dist[j];                       k = j;                   }               }               visited[k] = 1;               for(int j=0; j<n; j++)               {                   if(dist[j] < dist[k] * map[k][j]/100)                   {                       dist[j] = dist[k] * map[k][j]/100;                   }               }           }           printf("%.6lf percent\n",dist[n-1]);       }       return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved