bellman-ford算法+优化,1Y
转语言途中能有这个正确率,真是牛X啊~
#include
<
stdio.h
>
long d[ 110 ];
int e[ 10010 ][ 3 ];
int n,m;
int init() ... {
scanf("%d%d",&n,&m);
if (n+m==0) return 0;
int i;
for (i=1;i<=n;i++) d[i]=99999999; d[1]=0;
for (i=1;i<=m;i++)
scanf("%d%d%d",&e[i][1],&e[i][2],&e[i][3]);
return 1;
}
int solve() ... {
int i,j,yes;
for (i=1;i<=n;i++)...{
yes=0;
for (j=1;j<=m;j++)...{
if (d[e[j][1]]+e[j][3]<d[e[j][2]]) ...{d[e[j][2]]=d[e[j][1]]+e[j][3]; yes=1;}
if (d[e[j][2]]+e[j][3]<d[e[j][1]]) ...{d[e[j][1]]=d[e[j][2]]+e[j][3]; yes=1;}
}
if (yes==0) break;
}
return 0;
}
int answer() ... {
printf("%d ",d[n]);
}
int main() ... {
while (init())...{
solve();
answer();
}
return 0;
}
long d[ 110 ];
int e[ 10010 ][ 3 ];
int n,m;
int init() ... {
scanf("%d%d",&n,&m);
if (n+m==0) return 0;
int i;
for (i=1;i<=n;i++) d[i]=99999999; d[1]=0;
for (i=1;i<=m;i++)
scanf("%d%d%d",&e[i][1],&e[i][2],&e[i][3]);
return 1;
}
int solve() ... {
int i,j,yes;
for (i=1;i<=n;i++)...{
yes=0;
for (j=1;j<=m;j++)...{
if (d[e[j][1]]+e[j][3]<d[e[j][2]]) ...{d[e[j][2]]=d[e[j][1]]+e[j][3]; yes=1;}
if (d[e[j][2]]+e[j][3]<d[e[j][1]]) ...{d[e[j][1]]=d[e[j][2]]+e[j][3]; yes=1;}
}
if (yes==0) break;
}
return 0;
}
int answer() ... {
printf("%d ",d[n]);
}
int main() ... {
while (init())...{
solve();
answer();
}
return 0;
}