首页 > 代码库 > hdu 1596 find the safest road(乘积最短路)
hdu 1596 find the safest road(乘积最短路)
题目:
链接:点击打开链接
题意:
思路:
对dijkstra稍作修改即可,每次更新dis[]时改为乘积。
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define INF 100000000 const int N = 1010; int n,m; double map[N][N],dis[N]; int st,ed; void dijkstra() { int vis[N]; memset(vis,0,sizeof(vis)); for(int i=1; i<=n; i++) { dis[i] = map[st][i]; } for(int i=1; i<n; i++) { int x; double maxx = 0; for(int y=1; y<=n; y++) { if(!vis[y] && (dis[y] - maxx) > 1e-6) { maxx = dis[x=y]; } } vis[x] = 1; for(int y=1; y<=n; y++) { if(maxx*map[x][y] - dis[y] > 1e-6) dis[y] = maxx*map[x][y]; } } if(dis[ed]) printf("%.3lf\n",dis[ed]); else printf("What a pity!\n"); } int main() { //freopen("input.txt","r",stdin); double s; while(scanf("%d",&n) != EOF) { for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { scanf("%lf",&s); map[i][j] = s; } } scanf("%d",&m); for(int i=1; i<=m; i++) { scanf("%d%d",&st,&ed); dijkstra(); } } return 0; }---------------------------------------------------------------
收获:
---------------------------------------------------------------
战斗,从不退缩;奋斗,永不停歇~~~~~~~~~
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。