poj3268---spfa
来源:互联网 发布:云计算的前景 编辑:程序博客网 时间:2024/04/30 12:44
最短路径。。。。
由于点比较多1000,,如果dijstra算法 o(n^2)肯定超时,这里用spfa算法。
由于1000点,没有用邻接表,内存略大。
算法很简单,还是正向建图,逆向建图,分别求出起点到其他点的最短距离,然后求和,就是从这点出发,然后再回来的的最短距离,最后求出最大值即可。
代码:
#include<stdio.h>#define maxN 1001#define inf 100000000int n, x, m;int mat[maxN][maxN];//正向图邻接矩阵bool flag[maxN][maxN];//正向图标志矩阵int re_mat[maxN][maxN];//逆向图邻接矩阵bool re_flag[maxN][maxN];//逆向图标示矩阵int dis[maxN];//起点到其他点的最短路径int disRes[maxN];//往返最短路径和bool vis[maxN];//标示那个点在队列中int queue[10 * maxN];//spfa队列//邻接矩阵初始化void Init(){for (int i = 1; i <= n; ++ i){for (int j = 1; j <= n; ++ j){mat[i][j] = inf;flag[i][j] = false;re_mat[i][j] = inf;re_flag[i][j] = false;}disRes[i] = 0;}}//spfa算法void spfa(int mat[][maxN], bool flag[][maxN]){for (int i = 1; i <= n; ++ i){vis[i] = false;dis[i] = inf;//disRes[i] = 0;}int head = 0,tail = 1;dis[x] = 0;queue[0] = x;while (head < tail){int u = queue[head];vis[u] = true;for (int i = 1; i <= n; ++ i){if (flag[u][i] && dis[i] > dis[u] + mat[u][i]){dis[i] = dis[u] + mat[u][i];if (!vis[i]){vis[i] = true;queue[tail] = i;tail ++;}}}vis[u] = false;head ++;}for (int i = 1; i <= n; ++ i){disRes[i] += dis[i];}}int main(){while (scanf("%d%d%d", &n, &m, &x) != EOF){int a, b, c;int mMax = -1;Init();for (int i = 0; i < m; ++ i){scanf("%d%d%d", &a, &b, &c);mat[a][b] = c;flag[a][b] = true;re_mat[b][a] = c;re_flag[b][a] = true;}spfa(mat, flag);spfa(re_mat, re_flag);for (int i = 1; i <= n; ++ i){if (mMax < disRes[i]){mMax = disRes[i];}}printf("%d\n", mMax);}return 0;}
- poj3268---spfa
- POJ3268 SPFA
- poj3268 spfa
- poj3268俩次SPFA。。。。。
- poj3268 Silver Cow Party(SPFA)
- POJ3268 Sliver Cow Party SPFA
- 【POJ3268】Silver Cow Party【spfa】
- Silver Cow Party--poj3268(SPFA)
- [spfa/dijkstra]poj3268 Silver Cow Party
- POJ3268 Silver Cow Party(dijkstra,spfa)
- 图论基础SPFA:poj3268模板题
- poj3268
- poj3268
- poj3268
- poj3268
- POJ3268
- poj3268
- poj3268
- UVA - 12475 :求椭圆的周长,精度要求很高
- BSTR,_bstr_t
- SQL Server中查询某列所在的数据库中所在的表
- “显示表面”初窥
- Renaming an SVN(Subversion) Repository
- poj3268---spfa
- org.hibernate.hql.ast.QuerySyntaxException: XX is not mapped hibernate 注解出错
- 如何在Eclipse中查看JDK类库的源代码
- ExtJS Grid中文字链接点击事件的更合理的处理办法
- usb probe
- Silverlight写错误日志
- 在Fedora14系统上挂载A8 开发版 详细过程 及问题解决 (接上篇,nfs挂载步骤之二)
- C#简单的记录
- 查询整个数据库中某个特定值所在的表和字段的方法