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
- uva 1001 奶酪里的老鼠(狄杰斯特拉或弗洛伊德)
- 老鼠吃奶酪或走迷宫,搜索路径问题
- UVA-10048(弗洛伊德)
- dp老鼠偷奶酪
- 老鼠吃奶酪。
- 老鼠吃奶酪
- 老鼠偷奶酪 题解
- HDU 1078 FatMouse and Cheese (老鼠吃奶酪)
- 基于遗传算法和粒子群算法的混合算法实现小老鼠找奶酪问题
- POJ-1847-Tram(裸迪杰斯特拉或弗洛伊德)
- 老鼠跳或上楼梯的问题
- hihoCoder#1608 : Jerry的奶酪(dp)
- 岸上的猫和水里的老鼠
- 生日的惊喜-小老鼠老鼠老鼠
- “别动我的奶酪!”
- FatMouse的奶酪
- 奶酪
- 奶酪
- 在case语句中定义变量的问题
- 反思研一走过的路线
- spark:学习杂记--42
- 如何判别机器是大端还是小端
- Http methods
- uva 1001 奶酪里的老鼠(狄杰斯特拉或弗洛伊德)
- Dijkstra算法求带权图的单源最短路径
- OpenCV中Mat数据结构使用举例
- cocos2dx android版本移植时的Error format not a string literal and no format arguments解决方案
- oracle数据类型和对应的java类型
- poj2965
- RTTI&反射笔记
- Xcode插件
- cocos2dx环境配置及打包apk