| ||||||||||
| 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 | |||||||||
贴一下AC代码感觉好多人的代码风格好糟糕啊,我的应该还好吧
#include <stdio.h>
#include <limits.h>
#define MAXN 501
int G[MAXN][MAXN],vexnum;
int dis[MAXN];
void Initial(int N)
{ int i,j;
for(i=0;i<=N;++i)
for(j=0;j<=N;++j)
G[i][j]=INT_MAX;
vexnum=N;
}
int FindMin(int visited[])
{ int i,min=INT_MAX,k=-1;
for(i=1;i<=vexnum;++i)
{ if(visited[i]==1) continue;
if(dis[i]<min)
{ min=dis[i];
k=i;
}
}
return k;
}
void Dijkstra(int k)
{ int visited[MAXN],i;
for(i=1;i<=vexnum;++i)
dis[i]=G[k][i],visited[i]=0;
dis[k]=0,visited[k]=1;
while(1)
{ k=FindMin(visited);
if(k==-1) return;
visited[k]=1;
for(i=1;i<=vexnum;++i)
{ if(visited[i]==1||G[k][i]==INT_MAX) continue;
if(dis[i]>dis[k]+G[k][i])
dis[i]=dis[k]+G[k][i];
}
}
}
void Qsort(int s[],int left,int right)
{ if(left<right)
{ int i=left,j=right,pivot=s[left];
while(i<j)
{ while(i<j&&s[j]>=pivot) --j;
if(i<j) s[i++]=s[j];
while(i<j&&s[i]<pivot) ++i;
if(i<j) s[j--]=s[i];
}
s[i]=pivot;
Qsort(s,left,i-1);
Qsort(s,i+1,right);
}
}
int main()
{ int F,P,C,M;
int a,b,c,i;
int res[MAXN],len;
while(scanf("%d %d %d %d",&F,&P,&C,&M)!=EOF)
{ Initial(F);
while(P--)
{ scanf("%d %d %d",&a,&b,&c);
if(c<G[a][b])
G[a][b]=G[b][a]=c;
}
Dijkstra(1);
len=0;
for(i=1;i<=C;++i)
{ scanf("%d",&a);
if(dis[a]<=M)
res[len++]=i;
}
printf("%d\n",len);
Qsort(res,0,len-1);
for(int i=0;i<len;++i)
printf("%d\n",res[i]);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator