Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

floyed更好吧

Posted by ecjtubaowp at 2007-05-03 17:42:55 on Problem 1125
In Reply To:可不可以用Dijkstra算法啊?哪位大牛帮忙看看程序吧 Posted by:vigour at 2007-05-03 15:57:59
> 一开始编的,觉得应该也可以啊
> 发现大家都用Floyd-Warshall,不知道我这个怎么改?或者哪里行不通。。。
> 
> #include<iostream.h>
> using namespace std;
> #define MAX 102
> #define INF 200
> 
> int main()
> {
>     int n,c[MAX][MAX],num;
>     int time[MAX],prev[MAX],dist[MAX],minTime,maxTime,start;
>     int temp1,temp2,i,j,k,u,temp,newdist;
>     bool s[MAX];
> 
>     scanf("%d",&n);
>     while(n!=0)
>     {
>         for(i=1;i<=n;i++)
>           for(j=1;j<=n;j++)
>             c[i][j]=INF;
>         for(i=1;i<=n;i++)
>         {
>            scanf("%d",&num);
>            for(j=0;j<num;j++)
>            {
>               scanf("%d%d",&temp1,&temp2);
>               c[i][temp1]=temp2;
>            }
>         }
>         start=1;
>         minTime=10000000;
>         for(i=1;i<=n;i++)
>         {   
>             maxTime=0;
>             for(j=1;j<=n;j++)
>             {
>                dist[j]=c[i][j];
>                s[j]=false;
>                if(dist[j]==INF) prev[j]=0;
>                else  prev[j]=i;
>             }
>             dist[i]=0; s[i]=true; time[i]=0;
>             for(j=1;j<n;j++)
>             {
>                temp=INF;
>                u=i;
>                for(k=1;k<=n;k++)
>                   if(!s[k] && dist[k]<temp)
>                   {
>                      u=k;
>                      temp=dist[k];
>                   }
>                
>                if(temp==INF) break;
>                s[u]=true; time[u]=time[prev[u]]+temp; 
>                if(time[u]>maxTime) maxTime=time[u];
>                for(k=1;k<=n;k++)
>                   if(!s[k] && c[u][k]<INF)
>                   {
>                      newdist=dist[u]+c[u][k];
>                      if(newdist<dist[k])
>                      {
>                         dist[k]=newdist;
>                         prev[k]=u;
>                      }
>                   }
>             }
>             if(temp!=INF && maxTime<minTime){ minTime=maxTime; start=i; }
>         }
>         if(minTime==10000000) printf("disjoint\n");
>         else printf("%d %d\n",start,minTime);
>         scanf("%d",&n);
>     }
>     system("pause");
> }

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator