SDUTOJ(2143)图结构练习——最短路径
2018-02-28 22:13
555 查看
图结构练习——最短路径
Time Limit: 1000 ms Memory Limit: 65536 KiB [align=center]Submit Statistic Discuss [/align]Problem Description
给定一个带权无向图,求节点1到节点n的最短路径。Input
输入包含多组数据,格式如下。 第一行包括两个整数n m,代表节点个数和边的个数。(n<=100)剩下m行每行3个正整数a b c,代表节点a和节点b之间有一条边,权值为c。Output
每组输出占一行,仅输出从1到n的最短路径权值。(保证最短路径存在)Sample Input
3 2 1 2 1 1 3 1 1 0
Sample Output
1 0
Hint
Source
赵利强解题思路:弗洛伊德算法O(N的立方)的时间复杂度。
AC代码:#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int D[1000][1000];
void Init_Gra(int n)
{
int i, j;
for(i = 0; i<=n; i++)
{
for(j = 0; j<=n; j++)
{
if(i != j)
{
D[i][j] = INF;
}
else
{
D[i][j] = 0;
}
}
}
}
void Floyd(int n)
{
int i, j, k;
for(i = 0; i <= n; i++)
{
for(j = 0; j <= n; j++)
{
for(k = 0; k <= n; k++)
{
if(D[j][k] > D[j][i] + D[i][k])
{
D[j][k] = D[j][i] + D[i][k];
}
}
}
}
}
int main()
{
int n, m, a, b, c;
while(~scanf("%d %d", &n, &m))
{
Init_Gra(n);//初始化
while(m--)
{
scanf("%d %d %d", &a, &b, &c);
if(D[a][b] > c) //去重取最小
{
D[a][b] = D[b][a] = c;
}
}
Floyd(n);//弗洛伊德算法
printf("%d\n", D
[1]);
}
return 0;
}
相关文章推荐
- SDUTOJ 2143 图结构练习——最短路径 邻接链表 SPFA算法
- 【2143】图结构练习——最短路径 (Dijkstra算法)(SDUT)
- SDUT2143图结构练习——最短路径
- SDUT 2143 图结构练习——最短路径 SPFA模板,方便以后用。。
- sdut2143图结构练习——最短路径
- OJ2143图结构练习——最短路径(迪杰斯特拉算法)
- sdut oj2143 图结构练习——最短路径
- SDUT 2143 图结构练习——最短路径(Dijkstra 单源最短路径求解)
- 图结构练习——最短路径(sdut_2143)
- SDUT OJ 2143 图结构练习——最短路径
- SDUT 2143 - 图结构练习——最短路径(dijkstra+模板)
- SDUT 2143 图结构练习——最短路径
- SDUT 2143 图结构练习——最短路径
- SDUT 2143 图结构练习——最短路径
- (模板题)sdut 2143 图结构练习——最短路径(SPFA求最短路)
- [SDUT](2143)图结构练习——最短路径 ---单源最短路径(图)
- SDUT2143 图结构练习——最短路径
- SDUT2143 图结构练习——最短路径
- 图结构练习——最短路径---2143
- 【2143】图结构练习——最短路径 (Dijkstra算法)(SDUT)