最短路算法求助

月光下的酒 2014-03-08 02:36:54
传送门:
http://acm.zjnu.edu.cn/CLanguage/showproblem?problem_id=1211

Description

给定M条边,N个点的带权无向图
求1到N的最短路
N<=100000

M<=500000
Input

第一行:N,M
接下来M行3个正整数:ai,bi,ci
表示ai,bi之间有一条长度为ci的路
ci<=1000
Output

一个整数,表示1到N的最短距离
Sample Input


4 4
1 2 1
2 3 1
3 4 1
2 4 1
Sample Output


2









My code:

#include<stdio.h>
int main(void){
int N,M;
scanf("%d %d",&N,&M);
int map[N+1][N+1];
int a,b,c;
int visit[N+1];
int parent[N+1];
long long int d[N+1];
int i,k,p;

if(N>100000)return 0;
if(M>500000)return 0;



for(i = 1;i<N+1;i++)visit[i]=0;
//初始化map
for(i=1;i<N+1;i++)
for(k=1;k<N+1;k++)
{
map[i][k]=1111;//map最大是1000,初始化1111为无穷大
map[k][i]=1111;
}
while(M--){
scanf("%d %d %d",&a,&b,&c);
map[a][b]=c;
map[b][a]=c;
}
for(i = 1;i<N+1;i++)d[i]=(long long int)1e9;

//把点1设置为起点
d[1]=0;


for(i = 1;i<N+1;i++){

int a=0;
int min=1111;
for(k = 1;k<N+1;k++){
if(!visit[k]&&d[k]<min){
a=k;
min=d[k];
}
}

if(a==0)
break;

//把a加入到树中
visit[a]=1;

int sum=0;
for(p=1;p<N+1;p++){
if(!visit[p]&&map[a][p]+d[a]<d[p])
{
d[p]=map[a][p]+d[a];
parent[p]=a;
}
}
}


printf("%lld\n",d[N]);
return 0;
}

为什么不行呢,求大神debug...
...全文
294 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
M阳光 2014-03-14
  • 打赏
  • 举报
回复
引用 10 楼 buyong 的回复:
引用 8 楼 M173475237 的回复:
[quote=引用 7 楼 M173475237 的回复:] [quote=引用 6 楼 u012421456 的回复:] [quote=引用 5 楼 h15757160454 的回复:] [quote=引用 4 楼 u012421456 的回复:] 这个。。。lz代码问题太多啊!远的不说,先说你代码的第四五行,在C 语言中数组的长度能是这样吗?(个人见解,如有错误,敬请指正)
可以啊,我记得这样好像是叫做 变长数组,C99标准定义的C语言新特性。
这个。。。lz用的什么编译器啊? 这是VS2012的情况—— 这是VC6.0的情况——[/quote] 变长数组不能是二维的。[/quote] 微软做的编译器是不支持的。。GCC阔以~[/quote] gcc是神仙?[/quote] 你可能理解错了,gcc支持一维的边长数组。但数组在定义了以后长度就固定了,只是可以用变量定义长度而已。
buyong 2014-03-14
  • 打赏
  • 举报
回复
引用 8 楼 M173475237 的回复:
引用 7 楼 M173475237 的回复:
[quote=引用 6 楼 u012421456 的回复:] [quote=引用 5 楼 h15757160454 的回复:] [quote=引用 4 楼 u012421456 的回复:] 这个。。。lz代码问题太多啊!远的不说,先说你代码的第四五行,在C 语言中数组的长度能是这样吗?(个人见解,如有错误,敬请指正)
可以啊,我记得这样好像是叫做 变长数组,C99标准定义的C语言新特性。
这个。。。lz用的什么编译器啊? 这是VS2012的情况—— 这是VC6.0的情况——[/quote] 变长数组不能是二维的。[/quote] 微软做的编译器是不支持的。。GCC阔以~[/quote] gcc是神仙?
buyong 2014-03-14
  • 打赏
  • 举报
回复
引用 5 楼 h15757160454 的回复:
引用 4 楼 u012421456 的回复:
这个。。。lz代码问题太多啊!远的不说,先说你代码的第四五行,在C 语言中数组的长度能是这样吗?(个人见解,如有错误,敬请指正)
可以啊,我记得这样好像是叫做 变长数组,C99标准定义的C语言新特性。
从这回答看lz有当政治家的潜质。但不适和程序员。程序员都是先编译看是否出错。然后查C99标准里在哪说可以这样写了。 lz这一句,楼下的把这些都给做了。
M阳光 2014-03-14
  • 打赏
  • 举报
回复
引用 7 楼 M173475237 的回复:
引用 6 楼 u012421456 的回复:
[quote=引用 5 楼 h15757160454 的回复:] [quote=引用 4 楼 u012421456 的回复:] 这个。。。lz代码问题太多啊!远的不说,先说你代码的第四五行,在C 语言中数组的长度能是这样吗?(个人见解,如有错误,敬请指正)
可以啊,我记得这样好像是叫做 变长数组,C99标准定义的C语言新特性。
这个。。。lz用的什么编译器啊? 这是VS2012的情况—— 这是VC6.0的情况——[/quote] 变长数组不能是二维的。[/quote] 微软做的编译器是不支持的。。GCC阔以~
M阳光 2014-03-14
  • 打赏
  • 举报
回复
引用 6 楼 u012421456 的回复:
引用 5 楼 h15757160454 的回复:
[quote=引用 4 楼 u012421456 的回复:] 这个。。。lz代码问题太多啊!远的不说,先说你代码的第四五行,在C 语言中数组的长度能是这样吗?(个人见解,如有错误,敬请指正)
可以啊,我记得这样好像是叫做 变长数组,C99标准定义的C语言新特性。
这个。。。lz用的什么编译器啊? 这是VS2012的情况—— 这是VC6.0的情况——[/quote] 变长数组不能是二维的。
月光下的酒 2014-03-14
  • 打赏
  • 举报
回复
引用 9 楼 buyong 的回复:
引用 5 楼 h15757160454 的回复:
[quote=引用 4 楼 u012421456 的回复:] 这个。。。lz代码问题太多啊!远的不说,先说你代码的第四五行,在C 语言中数组的长度能是这样吗?(个人见解,如有错误,敬请指正)
可以啊,我记得这样好像是叫做 变长数组,C99标准定义的C语言新特性。
从这回答看lz有当政治家的潜质。但不适和程序员。程序员都是先编译看是否出错。然后查C99标准里在哪说可以这样写了。 lz这一句,楼下的把这些都给做了。[/quote] 我是用C-FREE的。。它没报错。。我还以为这样就是可以的说。。
百曉生 2014-03-12
  • 打赏
  • 举报
回复
引用 5 楼 h15757160454 的回复:
引用 4 楼 u012421456 的回复:
这个。。。lz代码问题太多啊!远的不说,先说你代码的第四五行,在C 语言中数组的长度能是这样吗?(个人见解,如有错误,敬请指正)
可以啊,我记得这样好像是叫做 变长数组,C99标准定义的C语言新特性。

这个。。。lz用的什么编译器啊?
这是VS2012的情况——

这是VC6.0的情况——
月光下的酒 2014-03-12
  • 打赏
  • 举报
回复
引用 4 楼 u012421456 的回复:
这个。。。lz代码问题太多啊!远的不说,先说你代码的第四五行,在C 语言中数组的长度能是这样吗?(个人见解,如有错误,敬请指正)
可以啊,我记得这样好像是叫做 变长数组,C99标准定义的C语言新特性。
百曉生 2014-03-08
  • 打赏
  • 举报
回复
这个。。。lz代码问题太多啊!远的不说,先说你代码的第四五行,在C 语言中数组的长度能是这样吗?(个人见解,如有错误,敬请指正)
月光下的酒 2014-03-08
  • 打赏
  • 举报
回复
不开心
FancyMouse 2014-03-08
  • 打赏
  • 举报
回复
1111肯定不对。1e9不行是说明其他地方有问题。 算法也不用看了。你这个就算写对了也肯定是超时/爆内存的。
月光下的酒 2014-03-08
  • 打赏
  • 举报
回复
把缩放循环中的min变量初始化为1e9也不行.

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧