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 |
floyed更好吧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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator