hdu2544-------dijkstra模板题
昨晚掌握了dijkstra算法,就在hdu找了一道模板题来刷。题很简单,完全就是数据结构上的算法模板敲的。写完一交,WA! 无语,还以为第一次敲这个算法,没理解呢!又上网上找别人能过的算法敲了一个,一交,又WA! ,表示很无奈啊!一直交了5,错了5次,快疯了。到最后发现,题目描述骗人,他说c《=1000.事实上c超大。最后设置 inf=100000000,才AC! 唉,这算什么啊
算法很简单,dijkstra模板
AC:
#include<stdio.h>
#include<string.h>
#define inf 100000000
int map[105][105];
int d[105];
int s[105];
int n,m;
int dij(int v)
{
int i,j,k;
int min,pos;
for(i=1;i<=n;i++) // 初始化
{
s[i]=0;
d[i]=map[v][i];
}
s[v]=1;
d[v]=0;
for(i=1;i<n;i++)
{
min=inf;
for(j=1;j<=n;j++)
{
if(!s[j]&&min>d[j])
{
pos=j;
min=d[j];
}
}
s[pos]=1;
for(j=1;j<=n;j++)
{
if(!s[j]&&d[j]>(d[pos]+map[pos][j]))
d[j]=d[pos]+map[pos][j];
}
}
return d[n];
}
int main()
{
int i,j,k;
int a,b,c;
while(scanf("%d%d",&n,&m)!=EOF&&n!=0&&m!=0)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
map[i][j]=inf;
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
map[a][b]=map[b][a]=c;
}
k=dij(1);
printf("%d\n",k);
}
return 0;
}