【floyed】导游的魔棒

编程入门 行业动态 更新时间:2024-10-10 06:20:15

【floyed】<a href=https://www.elefans.com/category/jswz/34/1694000.html style=导游的魔棒"/>

【floyed】导游的魔棒


思路:

初看此题,n<=50直接用floyed写,我用了三维数组f[i][j][0/1]表示从i到j有没有用减半的最短距离,然后floyed来求最短路就好了,然后变量要开double,因为折半要除以2,会出现0.5的情况


C o d e Code Code:

#include <cstdio>
#include <iostream>
#include <cstring>
#define CWH using
#define AK namespace
#define IOI std
CWH AK IOI;
int n;
double a[100][100],f[100][100][100];//a是图
int main ()
{
//	freopen ("c.in","r",stdin);
//	freopen ("c.out","w",stdout);scanf("%d",&n);for (int i = 1; i <= n; ++i)for (int j = 1; j <= n; ++j){scanf("%lf",&a[i][j]);  if (a[i][j] == 0) {f[i][j][0] = 10010100;f[i][j][1] = 10010100;}else //要不要折半{             f[i][j][0] = a[i][j];f[i][j][1] = a[i][j] / 2;                                          }}for (int k = 1; k <= n; ++k)//floyedfor (int i = 1; i <= n; ++i)for (int j = 1; j <= n; ++j)if(i != j && i != k && j != k){f[i][j][0] = min (f[i][j][0], f[i][k][0] + f[k][j][0]);f[i][j][1] = min (f[i][j][1], f[i][k][1] + f[k][j][0]);f[i][j][1] = min (f[i][j][1], f[i][k][0] + f[k][j][1]);}if(f[1][n][1] == 10010100)printf("-1");else        //判断能否到达          printf("%.2lf",(double)f[1][n][1]);
} 

更多推荐

【floyed】导游的魔棒

本文发布于:2024-03-23 17:22:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1740817.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:导游   floyed

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!