uva 1001 奶酪里的老鼠(狄杰斯特拉或弗洛伊德)

来源:互联网 发布:淘宝全网举报有用吗 编辑:程序博客网 时间:2024/05/01 14:19


题意:在一个三维的奶酪里面有n(n<=100)个洞,老鼠A想到达老鼠B的位置,

在洞里面可以瞬间移动,在洞外面的移动速度为10秒一个单位,求最短时间

本来不难的一道题,因为图论做得少所以不太熟悉浪费了很多时间,今晚怒改一遍,试了弗洛伊德和狄杰斯特拉算法,都ac了,主要是读题不认真,泪目,今天下午选拔赛两道题也是因为各种数据类型的细节浪费时间,以后要多注意,after all ,detail is devil

#include<cstdio>  #include<cstring>  #include<cmath>  #include<cstdlib>  #include<iostream>  #include<algorithm>  #include<vector>  #include<map>  #include<queue>  #include<stack> #include<string>#include<map> #include<set>using namespace std;  #define LL long long  double INF = 100000000000.0; const int maxn = 100 + 5;struct Node{int x, y, z, r;}nodes[maxn];int vis[maxn];double G[maxn][maxn], d[maxn];int n;void dijkstra(int s) {for(int i = 0; i <= n + 1; i++) d[i] = (i == s ? 0.0 : INF);memset(vis, 0, sizeof(vis));for(int i = 0; i <= n + 1; i++) {double mind = INF;int tag;for(int j = 0; j <= n + 1; j++) {if(!vis[j] && d[j] < mind) {mind = d[j];tag = j;} }vis[tag] = 1;for(int j = 0; j <= n + 1; j++) d[j] = min(d[j], d[tag] + G[tag][j]);//printf("%d %lf %lf\n",tag,mind,d[tag]);}} int main() {//freopen("input.txt", "r", stdin);int hole,kase=0;while(scanf("%d", &hole) && hole != -1){n = hole;int x, y, z, r;for(int i = 1; i <= hole; i++){scanf("%d%d%d%d", &x, &y, &z, &r);nodes[i].x = x;nodes[i].y = y;nodes[i].z = z;nodes[i].r = r;}scanf("%d%d%d", &x, &y, &z);nodes[0].x = x;nodes[0].y = y;nodes[0].z = z;nodes[0].r = 0;scanf("%d%d%d", &x, &y, &z);nodes[n + 1].x = x;nodes[n + 1].y = y;nodes[n + 1].z = z;nodes[n + 1].r = 0;for(int i = 0; i <= n + 1; i++) G[i][i] = 0;for(int i = 0; i < n + 1; i++)for(int j = i + 1; j <= n +1; j++) if(i != j){ Node& u = nodes[i]; Node& v = nodes[j];G[i][j] = G[j][i] = max(0.0, sqrt( (double)pow(u.x - v.x, 2) + (double)pow(u.y - v.y, 2) + (double)pow(u.z - v.z, 2) ) - (double)u.r - (double)v.r);}//dijkstra(0);//printf("%lf\n", G[0][1]);/* for(int k=0;k<=n + 1;k++)          for(int i=0;i<=n + 1;i++)           for(int j=0;j<=n + 1;j++)          G[i][j]=min(G[i][j],G[i][k]+G[k][j]);*///int ans = (int)(G[0][n+1] * 10+ 0.5);dijkstra(0);int ans = (int)(d[n + 1] * 10 + 0.5);//printf("Cheese %d: Travel time = %d sec\n", ++kase, ans);printf("Cheese %d: Travel time = %d sec\n", ++kase, ans);}return 0;} 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 军人被纠察抓了怎么办 我家的小孩很凶怎么办 10岁儿童老挤眼怎么办? 脚趾长鸡眼好痛怎么办 月加班超过36小时怎么办 月经老提前怎么办才好 20岁例假不规律怎么办 农村的医保门诊封顶了怎么办 保研夏令营被拒怎么办 小学生去英国游学怎么办签证 医生说我湿气重怎么办 喉咙痛有来医生感冒喉咙痛怎么办 暴马丁香叶子卷怎么办 房产权40年以后怎么办 面试回答不了考官的问题怎么办 轻伤事故对方要钱太多我怎么办 退休后有房子住公积金怎么办 江苏副高评过不聘怎么办 抗环瓜氨酸肽抗体高怎么办 脚被磨破了好痛怎么办 脚磨破皮肿了怎么办 脚磨破皮发炎了怎么办 3个月婴儿流口水怎么办 beats耳机被偷了怎么办 beats X耳机丢了怎么办 头戴耳机戴着热怎么办 长时间戴耳机耳朵疼怎么办 手表秒针走得声音很大怎么办 顾客总找老板剪头发怎么办 马来西亚国籍想去中国怎么办 有限元学位课挂了怎么办 五百丁简历导出后不一样怎么办 面试早到了1小时怎么办 头顶头发会越来越少怎么办 vr游戏过后想吐怎么办 win10电脑不能打汉字怎么办 手机看vr特别烫怎么办 苹果手机浏览器横屏怎么办 苹果笔记本浏览器没有了怎么办 剑与家园魔镜带错兵怎么办 橙子vr上下反了怎么办