| ||||||||||
| 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 | |||||||||
异形?In Reply To:我也是那个的变种,不知道是不是错了, Posted by:Essence_me at 2005-08-15 11:16:22 > DIJ结构不变,然后每次寻找在X集合中到Y集合中最长的边,再更新DIST(如果COST[V][W]>DIST[W] 那么更新DIST)
> 谁可以教教我这样做对不对?
> 程序如下:
> #include <stdio.h>
> #include <memory.h>
> #include <string.h>
> #define true 1
> #define false 0
> #define I -9999
> int cost[200][20];
> int dist[200];
> int v0,v1;
> int Teams=0,Index[200];
> char Name[200][100];
>
> int GetID(char *NowName)
> {
> int i,j,k,b;
> i = -1;j = Teams;
> while (i < j-1)
> {
> k = (i+j)/2;
> b = strcmp(Name[Index[k]],NowName);
> if (!b)
> {
> return Index[k];
> }
> if (b>0)
> {
> j=k;
> }
> else
> {
> i=k;
> }
> }
> for (i=Teams;i>j;i--)
> {
> Index[i]=Index[i-1];
> }
>
> Index[j]=Teams;
> strcpy(Name[Teams],NowName);
>
> Teams++;
> return Teams-1;
> }
>
> void main()
> {
> int final[200], i,j, v, v1,w,max,min,d,n,m,num=0;
> char name[200],start[100],end[100];
> int x,y,distance,load[100];
>
> while(1)
> {
>
> num++;
> scanf("%d%d", &n,&m);
> if(n==0&&m==0)break;
> memset(load,0,sizeof(int)*n);
> for(i = 0; i < m; i++)
> {
> scanf("%s",name);
> x=GetID(name);
> scanf("%s", name);
> y=GetID(name);
> scanf("%d", &distance);
> cost[x][y]=distance;
> cost[y][x]=distance;
> }
> scanf("%s %s",start,end);
> d=GetID(end);
> v0=GetID(start);
> for(i=0;i<n;i++)
> for(j=0;j<n;j++)
> {
> if(cost[i][j]==0)cost[i][j]=I;
>
> }
> for (v = 0; v < n; v++)
> {
> final[v] = false;
> dist[v] = cost[v0][v];
> }
>
>
> final[v0] = true;
> load[v0]=-I;
> v=v0;
> for(i=1;i<n;i++)
> {
> max = I;
>
> v1=v;
> for (w=0;w<n;w++)
> {
> if (!final[w]&&dist[w]>max)
> {
> max=dist[w];
> v=w;
> }
> }
> final[v]=true;
> if(max<load[v1])load[v]=max;
> else load[v]=load[v1];
> for (w=0;w<n;w++)
> {
> if(!final[w]&&(cost[v][w]>dist[w]))
> {
> dist[w]=cost[v][w];
> }
> }
> }
> printf("Scenerio #%d\n",num);
> printf("%d tons\n\n",load[d]);
> }
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator