题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1797
思路:因为没有重边就不用判断了
AC代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>
const int inf = 0x3f3f3f3f;//1061109567
typedef long long LL;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
int n,m;
double map1[110][110];
int visit[110];
double lowdist[110];
double Dijkstra()//返回时double
{
memset(visit,0,sizeof(visit));
for(int i=1; i<=n; i++)
lowdist[i] = map1[1][i];
visit[1] = 1;
int k;
for(int i=1; i<n; i++)
{
double max1 = 0;//注意这里是double
for(int j=2; j<=n; j++)
{
if(!visit[j] && lowdist[j] > max1)
{
max1 = lowdist[j];
k = j;
}
}
visit[k] = 1;
for(int j=2; j<=n; j++)
{
if(!visit[j] && lowdist[k] * map1[k][j] > lowdist[j])
lowdist[j] = lowdist[k] * map1[k][j];
}
}
return lowdist[n];
}
int main()
{
while(scanf("%d",&n) && n)
{
scanf("%d",&m);
memset(map1,0,sizeof(map1));
int st,ed,value;
for(int i=0; i<m; i++)
{
scanf("%d%d%d",&st,&ed,&value);
map1[st][ed] = map1[ed][st] = value / 100.0;
}
printf("%.6lf percent\n",Dijkstra()*100);
}
return 0;
}