您的位置:首页 > 其它

HDU 1596 也是最小路径Dijkstra

2016-02-28 22:40 309 查看
#include<cstdio>
#include<cmath>
#include<cstring>
const int qq=1000+10;
double dist[qq];
double city[qq][qq];
int vis[qq];
int n,m;
int s,e;
void Dijkstra()
{
double MAX;
int u;
for(int i=1;i<=n;++i){
vis[i]=0;
dist[i]=city[s][i];
}
vis[s]=1;
for(int l=2;l<=n;++l){
MAX=0;u=s;
for(int i=1;i<=n;++i)
if(!vis[i] && dist[i] > MAX)
MAX = dist[u=i];
if(MAX==0)    break;
if(u==e)    break;
vis[u]=1;
for(int i=1;i<=n;++i)
if(!vis[i]){
if(dist[i]<dist[u]*city[u][i])
dist[i]=dist[u]*city[u][i];
if(dist[i]<dist[u]*city[i][u])
dist[i]=dist[u]*city[u][i];
}

}
if(u!=e)    printf("What a pity!\n");
else            printf("%.3lf\n",dist[e]);
}
int main()
{
while(~scanf("%d",&n)){
for(int j,i=1;i<=n;++i)
for(j=1;j<=n;++j)
scanf("%lf",&city[i][j]);
scanf("%d",&m);
for(int i=0;i<m;++i){
scanf("%d %d",&s,&e);
Dijkstra();
}
}
}


将原来的+换成*就行了、模板懂了这题就是水题了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: