题目:
点击打开链接
分析:审清题,注意格式。
代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
double cost[1010][1010],d[1010];
bool used[1010];
int t;
void distr(int x,int y)
{
for(int i=1;i<=t;i++)
{
d[i]=0;//初始化为最小
used[i]=false;
}
d[x]=1;//起点定为1,相乘!!!
while(true)
{
int v=-1;
for(int u=1;u<=t;u++)
if(!used[u]&&(v==-1||d[u]>d[v]))//
v=u;
if(v==-1)
break;
used[v]=true;
for(int u=1;u<=t;u++)
d[u]=max(d[u],d[v]*cost[v][u]);//
}
if(d[y]==0)
printf("What a pity!\n");
else
printf("%.3lf\n",d[y]);
}
int main()
{
while(~scanf("%d",&t))
{
int i,j;
int a,b,c;
double n;
memset(cost,0,sizeof(cost));
for(i=1;i<=t;i++)
for(j=1;j<=t;j++)
{
scanf("%lf",&n);// !!!实数
if(n>cost[i][j])//最安全
cost[i][j]=n;
}
scanf("%d",&a);
for(i=0;i<a;i++)
{
scanf("%d%d",&c,&b);
distr(c,b);
}
}
return 0;
}