[SDUT](2143)图结构练习——最短路径 ---单源最短路径(图)
2017-08-10 12:42
501 查看
图结构练习——最短路径
Time Limit: 1000MS Memory Limit: 65536KBSubmit Statistic Discuss
Problem Description
给定一个带权无向图,求节点1到节点n的最短路径。
Input
输入包含多组数据,格式如下。第一行包括两个整数n m,代表节点个数和边的个数。(n<=100)
剩下m行每行3个正整数a b c,代表节点a和节点b之间有一条边,权值为c。
Output
每组输出占一行,仅输出从1到n的最短路径权值。(保证最短路径存在)
Example Input
3 2 1 2 1 1 3 1 1 0
Example Output
1 0
注:加权无向图
AC代码:#include<iostream> #include<cstring> #define INF 0x3f3f3f3f using namespace std; int mmap[105][105]; bool vis[105]; int dist[105]; int n,m; int mmin; void dijkstra(int n) { int k; for(int i=1;i<=n;i++) dist[i]=mmap[1][i]; vis[1]=true; dist[1]=0; for(int i=1;i<=n;i++) { mmin=INF; k=0; for(int j=1;j<=n;j++) { if(!vis[j] && dist[j]<mmin) { mmin=dist[j]; k=j; } } vis[k]=true; for(int j=1;j<=n;j++) { if(!vis[j] && dist[k]+mmap[k][j]<dist[j]) dist[j]=dist[k]+mmap[k][j]; } } } int main() { while(cin>>n>>m) { int a,b,c; memset(mmap,0,sizeof(mmap)); memset(vis,false,sizeof(vis)); memset(dist,0,sizeof(dist)); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) mmap[i][j]=INF; } while(m--) { cin>>a>>b>>c; if(c<mmap[a][b]) { mmap[a][b]=mmap[b][a]=c; } } dijkstra(n); cout<<dist <<endl; } return 0; }
总结:dijkstra算法,基础题目。不过自己做这道题时发生了让自己苦笑不得的事,尽然!把memset(mmap,0,sizeof(mmap));写成了sizeof(mmap,0,sizeof(mmap));交题一直WA or RE,自己还纳闷了半个小时。2333333333,看来自己脑子还是瓦特啦
相关文章推荐
- SDUT 2143 图结构练习——最短路径(Dijkstra 单源最短路径求解)
- SDUT 2143 图结构练习——最短路径
- 【2143】图结构练习——最短路径 (Dijkstra算法)(SDUT)
- 【2143】图结构练习——最短路径 (Dijkstra算法)(SDUT)
- SDUT 2143 - 图结构练习——最短路径(dijkstra+模板)
- (模板题)sdut 2143 图结构练习——最短路径(SPFA求最短路)
- SDUT2143图结构练习——最短路径
- SDUT 2143 图结构练习——最短路径
- 图结构练习——最短路径(sdut_2143)
- SDUT 2143 图结构练习——最短路径 SPFA模板,方便以后用。。
- sdut2143图结构练习——最短路径
- SDUT2143 图结构练习——最短路径
- SDUT 2143 图结构练习——最短路径
- SDUT2143 图结构练习——最短路径
- 图结构练习——最短路径---2143
- OJ2143图结构练习——最短路径(迪杰斯特拉算法)
- SDUT OJ 2143 图结构练习——最短路径
- sdut oj2143 图结构练习——最短路径
- [SDUT](3363)数据结构实验之图论七:驴友计划 ---单源最短路径(图)
- SDUT-图结构练习——最短路径