題意:一只青蛙找到另外一只青蛙,不過可以通過其它的石頭跳到目標青蛙的位置去,其中,輸入數據的時候第一組數據是第一只青蛙的位置,第二組是目標青蛙的位置,其它的為石頭的位置
思路:dijkstra算法的一種小小的變形,做法還是一樣的
Tips:POJ上的雙精度浮點型輸出竟然是%f輸出害的我一直錯,或者是編譯錯誤,惱啊!
AC代碼:
#include#include #include using namespace std; #define maxn 100000000 #define N 212 struct p { int x,y; }; p point[N]; int n; double d[N]; double dis(p a,p b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } void dijkstra() { double minn; int i,j,vis[N],v; for(i=1;i<=n;i++) { vis[i]=0; d[i]=maxn; } v=1; d[1]=0; for(i=1;i<=n;i++) { minn=maxn; for(j=1;j<=n;j++) { if(!vis[j]&&d[j] max(d[v],dis(point[v],point[j]))) d[j]=max(d[v],dis(point[v],point[j])); } } int main() { int cnt=1; while(scanf("%d",&n)!=EOF) { if(n==0)break; for(int i=1;i<=n;i++) scanf("%d %d",&point[i].x,&point[i].y); dijkstra(); printf("Scenario #%d\nFrog Distance = %.3f\n",cnt++,d[2]); printf("\n"); } return 0; }