程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Frogger 最短路變種

Frogger 最短路變種

編輯:C++入門知識

[cpp]
/*注意細節。memset裡面的0x7f和常數賦值的0x7f差別很大。常數賦值的數值很小。而memset內部是按照字節進行賦值。是一個很大的值。
這一道題是一道最短路的變種。實際上是求所有路徑中最大邊的最小值。
起點是1,終點為2.*/ 
#include <stdio.h> 
#include <cstring> 
#include <cmath> 
#include <iostream> 
using namespace std; 
double dist[201]; 
double map[201][201]; 
bool vis[201]; 
struct point 

    double x,y; 
}; 
point p[201]; 
double dis(point a,point b) 

    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); 

int main() 

    int n; 
    int ca=1; 
    while(scanf("%d",&n)==1&&n) 
    { 
        for(int i=1;i<=n;i++) 
        scanf("%lf%lf",&p[i].x,&p[i].y); 
        memset(vis,false,sizeof(vis)); 
        memset(dist,0x7f,sizeof(dist)); 
        for(int i=1;i<=n;i++) 
        for(int j=1;j<=n;j++) 
        map[i][j]=map[j][i]=dis(p[i],p[j]); 
        dist[1]=0; 
        for(int i=1;i<=n;i++) 
        { www.2cto.com
            double minn=0x7f7f7f7f; 
            int k; 
            for(int j=1;j<=n;j++) 
            { 
                if(!vis[j]&&dist[j]<minn) 
                { 
                    k=j; 
                    minn=dist[j]; 
                } 
            } 
            vis[k]=true; 
            for(int j=1;j<=n;j++) 
            dist[j]=min(dist[j],max(dist[k],map[k][j])); 
        } 
        printf("Scenario #%d\n",ca++); 
        printf("Frog Distance = %.3lf\n",dist[2]); 
        printf("\n"); 
    } 
    return 0; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved