您的位置:首页 > 其它

去北京看奥运

2014-12-27 20:21 197 查看

去北京看奥运

Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 1080 Solved: 506

Description

2008年将到,王飞同学化了九牛二虎之力搞到了2张2008年奥运会足球赛决赛的门票。真是开心啊!他爸爸准备开车跟他一起去北京看球赛。不过门票费好贵啊,所以他爸爸说了,这个钱要在下学期的生活费里扣(好抠门),不过如果他能让从杭州去北京的油费最省(油价最近涨的好厉害啊),那么就不扣生活费了。哈哈,这个就难不倒他了。在ACM里可不是白混的。很快他算出了汽车从杭州到北京必须要加几次油,并查出了到北京要经过哪几个城市,每个城市有哪些加油站以及从某城市各加油站到另一城市各加油站的距离和路况算出了各加油站之间的耗油量。下面是不是很easy?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max1 99999999
int a[1000][1000];
int d[1000];//d表示某特定边距离
int p[1000];//p表示永久边距离
int m;//m表示边数
int n;//n表示点数

int main()
{
freopen("a.txt","r",stdin);
scanf("%d%d",&n,&m);
memset(p,0,sizeof(p));
int min1;
int x,y,z;
int i,j,k;
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
{
a[i][j]=max1;
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
a[x][y]=z;
//  a[y][x]=z;
}
/*  for(i=1;i<=n;i++)
{
printf("\n");
for(j=1;j<=n;j++)
{
printf("%-9d",a[i][j]);
}
}    */
printf("\n");
for(i=1;i<=n;i++)
d[i]=max1;
d[1]=0;
for(i=1;i<=n;i++)
{
min1=max1;
for(j=1;j<=n;j++)
if(!p[j]&&d[j]<min1)
{
min1=d[j];
k=j;
}
p[k]=1;
for(j=1;j<=n;j++)
if(a[k][j]!=0&&!p[j]&&d[j]>d[k]+a[k][j])
d[j]=d[k]+a[k][j];
}
/*  for(i=1;i<n;i++)
printf("%d->",d[i]);*/
printf("%d\n",d
);
return 0;
}


Dijkstra
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: