Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
为什么runtime error,我用最短路(暂用floyed,原想超时后改用迪杰斯特拉)可是。。#include <iostream> #include <cmath> using namespace std; struct Point{ int x, y; }; int const MAX = 500; double adj[MAX][MAX]; Point vetex[MAX]; int n = 2; //the number of vetex double EP = 1e-10; int index(Point p){ for(int i = 0; i < n ; i++) if(p.x == vetex[i].x && p.y == vetex[i].y) return i; vetex[n].x = p.x; vetex[n++].y = p.y; } double pointDistance(Point p1, Point p2){ double d = (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y); return sqrt(d); } int main(){ cin>>vetex[0].x>>vetex[0].y>>vetex[1].x>>vetex[1].y; Point pre, next; while(cin>>pre.x>>pre.y){ int indexPre = index(pre); int indexNext; while(cin>>next.x>>next.y && !(next.x == -1 && next.y == -1)){ indexNext = index(next); adj[indexPre][indexNext] = adj[indexNext][indexPre] = pointDistance(vetex[indexPre], next); indexPre = indexNext; } } for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) if(abs(adj[i][j]) < EP) adj[i][j] = 4 * pointDistance(vetex[i], vetex[j]); for(int k = 0; k < n; k++) for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) if(adj[i][k] + adj[k][j] < adj[i][j]) adj[i][j] = adj[i][k] + adj[k][j]; double d = adj[0][1] * 6 / 4000 ; int n = d; if(d - n > 0.5) cout<<n+1<<endl; else cout<<n; return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator