hdu1596 find the safest road 最短路dijkstra

hdu1596 find the safest road

 

 

最短路程改为最大概率

之前的INF,min,三角不等式都需要修改

 

#include<iostream>
using namespace std;

#define INF 10000000

int N,visit[1010];
double mp[1010][1010],dist[1010];

double dij(int s,int t)
{
	int i,j,k;
	memset(visit,0,sizeof(visit)); visit[s]=1;
	
	for(i=1;i<=N;i++)	dist[i]=mp[s][i];
	dist[s]=1;
	
	double max;
	k=s;
	for(i=1;i<=N;i++)
	{
		max=0;                    //不是INF - -
		for(j=1;j<=N;j++)
			if(!visit[j]&&max<dist[j])
			{
				max=dist[j];
				k=j;
			}
		
		visit[k]=1;
	//	printf("k=%d",k);
		for(j=1;j<=N;j++)
			if(!visit[j]&&dist[j]<dist[k]*mp[k][j])
				dist[j]=dist[k]*mp[k][j];
	//	for(j=1;j<=N;j++)
	//	printf("\t%.4lf",dist[j]);
	//	printf("\n");
	}
		
	//printf("%.3lf\n",dist[t]);
	return dist[t];
}


int main()
{
	int i,j,n,s,t;
	while(scanf("%d",&N)!=EOF)
	{
		for(i=1;i<=N;i++)
			for(j=1;j<=N;j++)
				scanf("%lf",&mp[i][j]);
		
		scanf("%d",&n);
		double x;
		for(i=1;i<=n;i++)
		{
			scanf("%d%d",&s,&t);
			x=dij(s,t);
			if(x<0.0000001)
				printf("What a pity!\n");  
			else
				printf("%.3lf\n",x);
		}
	}
	
	return 0;
}



/*
5
1 0.1 0.7 0.9 0
0.1 1 0 1 0.9
0.7 0 1 0.8 0.2
0.9 1 0.8 1 0.5
0 0.9 0.2 0.5 1


*/


 

你可能感兴趣的:(hdu1596 find the safest road 最短路dijkstra)