ZOJ 1298 Domino Effect 遗憾之Segmentation Fault
2013-08-10 21:10
260 查看
ZOJ
1298 Domino Effect 遗憾之Segmentation Fault
遇到Segmentation Fault一向不会改,课本上摘来几个图的例子都过了。求指导!!
题意:用多米诺骨牌做一个图,每当一个关键块(类似顶点)倒下,和它连着的那一排(类似边)就会倒下,问全部倒完要用多长时间?最后倒下的是关健块,还是两个关健块之间的块,如果是关健块,输出这个关健块的骨牌编号,如果是两个关健块之间的,输出这两个关健块的骨牌编号。
最短路之迪杰斯特拉算法,如果最后倒下的是一个关健块,就是这个顶点的最短路径;如果不是,很明显但是不太好想,每条边倒下的时间分别是它的两个顶点倒下的时间的和再加上这条边自己需要的时间,这个总和的一半。从两端走到最后一个骨牌的路径不同,但时间相同!!!
细节+代码:
1298 Domino Effect 遗憾之Segmentation Fault
遇到Segmentation Fault一向不会改,课本上摘来几个图的例子都过了。求指导!!
题意:用多米诺骨牌做一个图,每当一个关键块(类似顶点)倒下,和它连着的那一排(类似边)就会倒下,问全部倒完要用多长时间?最后倒下的是关健块,还是两个关健块之间的块,如果是关健块,输出这个关健块的骨牌编号,如果是两个关健块之间的,输出这两个关健块的骨牌编号。
最短路之迪杰斯特拉算法,如果最后倒下的是一个关健块,就是这个顶点的最短路径;如果不是,很明显但是不太好想,每条边倒下的时间分别是它的两个顶点倒下的时间的和再加上这条边自己需要的时间,这个总和的一半。从两端走到最后一个骨牌的路径不同,但时间相同!!!
细节+代码:
#include<stdio.h> #include<string.h> #define MAX 1000000.00 double min[600],edge[600][600],time[600][600]; int visit[600],n,e; int dijkstra(int v0){ int i,u,j; double temp; for(i = 1;i<=n;i++) min[i] = edge[v0][i]; visit[v0] = 1; for(i = 1;i<=n;i++){ temp = MAX; for(j = 1;j<=n;j++){ if(visit[j]!=1&&min[j]<temp){ temp = min[j]; u = j; } } visit[u] = 1; for(j = 1;j<=n;j++){ if(visit[j]!=1&&edge[u][j]<MAX&&min[j]>min[u]+edge[u][j]) min[j] = min[u]+edge[u][j]; } } return 0; } int main(){ int i,j,k,endn,fronte,ende,a,b; double maxn,maxe; for(i = 1;;i++){ memset(visit,0,sizeof(visit)); for(j = 0;j<=590;j++){ //因为段错误写的初始化,觉得没必要,而且依然段错误。 min[j] = 0.00; for(k = 0;k<=590;k++){ time[j][k] = MAX; edge[j][k] = MAX; } } scanf("%d%d",&n,&e); if(n==0&&e==0) break; if(n==1){ //一个顶点的情况。 printf("System #%d\n",i); printf("The last domino falls after 0.0 seconds, at key domino 1\n\n"); continue; } for(j = 1;j<=n;j++){ for(k = 1;k<=n;k++){ if(j==k) edge[j][k] = 0.00; else edge[j][k] = MAX; } } for(j = 1;j<=e;j++){ scanf("%d%d",&a,&b); scanf("%lf",&edge[a][b]); edge[b][a] = edge[a][b]; } dijkstra(1); maxn = 0.00; for(j = 1;j<=n;j++){ if(min[j]>maxn&&min[j]<MAX){ maxn = min[j]; endn = j; } } maxe = 0.00; for(j = 1;j<=n;j++){ for(k = i+1;k<=n;k++){ if(min[j]<MAX&&min[k]<MAX&&edge[j][k]<MAX) time[j][k] = (min[j]+min[k]+edge[j][k])/2*1.000; if(time[j][k]>maxe&&time[j][k]<MAX){ maxe = time[j][k]; fronte = j; ende = k; } } } if(maxn>=maxe){ printf("System #%d\n",i); printf("The last domino falls after %.1lf seconds, at key domino %d.\n\n",maxn,endn); } else{ printf("System #%d\n",i); printf("The last domino falls after %.1lf seconds, between key dominoes %d and %d.\n\n",maxe,fronte,ende); } } return 0; }
相关文章推荐
- 总结段错误(Segmentation fault)
- About Segmentation Fault in Linux ( SIGSEGV )
- 【整理】段错误(segmentation fault)
- forrtl: severe (174): SIGSEGV, segmentation fault occurred
- Linux环境下段错误(Segmentation fault)的产生原因及调试方法小结
- segmentation fault core dump
- linux C++ 莫名奇妙的段错误(segmentation fault),无法调用其它函数
- Segmentation fault error及core dumped
- linux segmentation fault原因
- Android系统编译APP make: ***/src/R.stamp] Segmentation fault (core dumped)出错的解决方案
- Segmentation Fault in Linux 原因与避免
- 解决Program received signal SIGSEGV, Segmentation fault.的辛酸
- Python 脚本运行时Segmentation fault (core dumped)
- linux线程(pthread)编程中的segmentation fault!!
- Apache报错:exit signal Segmentation fault (11)
- CentOS5.5部署zlib导致yum使用不了,报错Yum Segmentation Fault (core Dumped)
- Segmentation fault in c program runtime
- Segmentation fault in Linux
- 论Segmentation fault