zoukankan      html  css  js  c++  java
  • POJ2502 Subway

    http://poj.org/problem?id=2502

    这题本来应该用迪杰斯特拉做的 ,因为想试试弗洛伊德所以就试试 谁知道代码一一直wrong ,路过的麻烦指点一下

    代码一:
    #include<stdio.h>
    #include<math.h>
    
    struct node
    {
    	double x;
    	double y;
    }node[205];
    double dis[205][205];
    
    double cal(struct node a,struct node b)
    {
    	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    }
    
    int main()
    {
    	int i,j,k,v,u;
    	scanf("%lf%lf%lf%lf",&node[0].x,&node[0].y,&node[1].x,&node[1].y);
    	dis[0][1]=dis[1][0]=cal(node[0],node[1]);
    	i=2;
    	while(scanf("%lf%lf",&node[i].x,&node[i].y)!=EOF)
    	{
    		if((node[i].x==-1&&node[i].y==-1))
    		{
    			for(j=0;j<i;++j)
    				dis[j][j+1]=dis[j+1][j]=0.25*dis[j][j+1];
    			continue;
    		}
    		for(j=0;j<i;++j)
    			dis[i][j]=dis[j][i]=cal(node[j],node[i]);
    		++i;
    	}
    	for(k=0;k<i;++k)
    		for(v=0;v<i;++v)
    			for(u=0;u<i;++u)
    			if(dis[v][k]&&dis[u][k])
    			{
    				if(dis[v][u]>dis[v][k]+dis[k][u])
    					dis[v][u]=dis[v][k]+dis[k][u];
    			}
    	printf("%.2f\n",0.006*dis[0][1]);
    	return 0;
    }//wrong answer 不知道错在哪,路过的指点一下?
    /*
    
    代码二:
    #include<stdio.h> 
    #include<stdlib.h> 
    #include<math.h> 
    #include<string.h> 
      
    typedef struct point 
    { 
      double x,y;        
    } Point; 
    Point p[205]; 
      
    double dis[205][205];  
    double distance(Point a,Point b);//计算两点间距离  
      
    double floyd(int tot); 
      
    int main() 
    { 
      double ax,bx; 
      int i,j,k,stop; 
      memset(dis,0,sizeof(dis));   
        scanf("%lf%lf%lf%lf",&p[0].x,&p[0].y,&p[1].x,&p[1].y); 
       dis[0][1] = dis[1][0] = distance(p[0],p[1]); 
        
       i = 2; 
       while(1)   
       { 
          if(scanf("%lf%lf",&ax,&bx) != 2) break;  
          k = i ; 
          do
          {  
             
             p[i].x = ax ; p[i].y = bx ;    
             for(j = 0 ; j < i ; ++j)//计算新的点到其余各点的距离  
              dis[i][j] = dis[j][i] = distance(p[i],p[j]); 
             ++i; 
               
          }while(scanf("%lf%lf",&ax,&bx)&&(ax != -1 || bx != -1)); 
                
          for(j = k ; j < i-1 ; ++j)//地铁,距离缩小4倍,因为速度快4倍  
           dis[j][j+1] = dis[j+1][j] = distance(p[j],p[j+1])*0.25; 
             
       } 
      
      stop = i; 
      printf("%.0lf\n",0.006*floyd(stop)); //换算成时间  
      //system("pause"); 
      return 0;     
    } 
      
    double floyd(int tot) 
    { 
      int i,j,k; 
      double t; 
        
      for(k = 0 ; k < tot ; ++k) 
       for(i = 0 ; i < tot ; ++i) 
        for(j = 0 ; j < tot ; ++j)       
        { 
           if(dis[i][k] && dis[k][j]) 
           { 
             t = dis[i][k] + dis[k][j]; 
             if(t < dis[i][j]) 
             dis[i][j] = t;              
           }                
        } 
        return dis[0][1]; 
    } 
      
    double distance(Point a,Point b) 
    { 
      return sqrt( (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));        
    }
    //别人的AC代码
      */
    
    功不成,身已退
  • 相关阅读:
    JavaScript(八)---- 文档对象模型DOM
    JavaScript(七)---- 浏览器操作对象BOM
    JavaScript(六)---- 原型prototype
    JavaScript(五)---- 基于对象的操作
    JavaScript(四)---- 函数
    团队编程项目作业2-Python简单小游戏设计文档
    团对-象棋游戏-开发环境搭建过程
    团队编程项目作业2-团队编程项目设计文档
    课后作业-阅读任务-阅读提问-3
    课后作业-阅读任务-阅读提问-1
  • 原文地址:https://www.cnblogs.com/dongsheng/p/2546845.html
Copyright © 2011-2022 走看看