ACM学习之路——HDU2544 HDU2066(spfa)
来源:互联网 发布:检查淘宝宝贝是否降权 编辑:程序博客网 时间:2024/06/16 04:22
题目链接
HDU2544 http://acm.hdu.edu.cn/showproblem.php?pid=2544
HDU2066 http://acm.hdu.edu.cn/showproblem.php?pid=2066
话说这两道我用的是spfa算法,由于第一次使用这个算法,找bug真是找的我昏天黑地。
第一个要注意的就是链式前向星的位置变量CNT在每一次的循环中都要初始化0;另外,其余的数组最好初始化为-1;以防止越界。
AC代码:
///////////////////////////////////////////////////////// // HDU 2066 //// Created by 吴尔立 //// Copyright (c) 2015年 吴尔立. All rights reserved. ///////////////////////////////////////////////////////////#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib> #include <algorithm>#include <cctype>#include <stack>#include <queue>#include <map>#include <string>#include <set>#include <vector>#define ll long long;#define INF 1<<31#define cir(i,a,b) for (int i=a;i<=b;i++)#define CIR(j,a,b) for (int j=a;j>=b;j--)#define CLR(x) memset(x,0,sizeof(x))using namespace std;#define maxn 2100int pnt[maxn],nxt[maxn],head[maxn],w[maxn],cnt=0;int T,S,D;bool vis[maxn];int d[maxn];void addedge(int u,int v,int weight){pnt[cnt]=v;nxt[cnt]=head[u];head[u]=cnt;w[cnt]=weight;cnt++;}int spfa(){queue<int> q;memset(d,0x3f,sizeof(d));memset(vis,false,sizeof(vis)); d[0]=0;q.push(0);vis[0]=true;while (!q.empty()){int x=q.front();q.pop();for (int i=head[x];~i;i=nxt[i]){int v=pnt[i];if (d[x]+w[i]<d[v] || d[v]==0x3f){d[v]=d[x]+w[i];if (!vis[v]){q.push(v);vis[v]=true;}}}vis[x]=false;}return d[1001];}int main(){while(cin >> T >> S >> D){cnt=0;memset(nxt,-1,sizeof(nxt));memset(head,-1,sizeof(head));cir (i,1,T){int a,b,time;scanf("%d%d%d",&a,&b,&time);addedge(a,b,time);addedge(b,a,time);}cir(i,1,S){int u;scanf("%d",&u);addedge(0,u,0);addedge(u,0,0);}cir(i,1,D){int v;scanf("%d",&v);addedge(1001,v,0);addedge(v,1001,0);}int ans=spfa();cout << ans <<endl;}return 0;}
///////////////////////////////////////////////////////// // HDU 2544 //// Created by 吴尔立 <span style="white-space:pre"></span> //// Copyright (c) 2015年 吴尔立. All rights reserved. ///////////////////////////////////////////////////////////#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib> #include <algorithm>#include <cctype>#include <stack>#include <queue>#include <map>#include <string>#include <set>#include <vector>#define ll long long;#define INF 1<<31#define cir(i,a,b) for (int i=a;i<=b;i++)#define CIR(j,a,b) for (int j=a;j>=b;j--)#define CLR(x) memset(x,0,sizeof(x))using namespace std;const int maxn = 10005;int N, M; //N个路口M条路; int A, B, C; //A到B用时为Cint pnt[maxn], pre[maxn], head[maxn], d[maxn], dis[maxn]; //d[i] 表示从起点到 i 但的最短路 int counter[maxn], vis[maxn];int cnt = 0; void addedge(int u, int v, int w) { pnt[cnt] = v; pre[cnt] = head[u]; dis[cnt] = w; head[u] = cnt++;} int spfa(int s) { queue<int> q; memset(d, -1, sizeof(d)); CLR(vis); d[s] = 0; q.push(s); vis[s] = 1; while (!q.empty()) { int x = q.front(); q.pop(); for (int i = head[x]; i != -1; i = pre[i]) //遍历邻接表 { int y = pnt[i]; if (d[y] == -1 || d[x] + dis[i] < d[y]) { d[y] = d[x] + dis[i]; if (!vis[y]) { vis[y] = 1; q.push(y); } } } vis[x] = 0; } return 0;} int main() { while (scanf("%d%d", &N, &M) != EOF && N != 0 && M != 0) { cnt = 0; CLR(dis); memset(head, -1, sizeof(head)); cir(i, 1, M) { scanf("%d %d %d", &A, &B, &C); addedge(A, B, C); addedge(B, A, C); } spfa(1); cout << d[N] << endl; } return 0;}
0 0
- ACM学习之路——HDU2544 HDU2066(spfa)
- ACM-最短路(SPFA,Dijkstra,Floyd)之最短路——hdu2544
- 最短路径——dj+floyd+spfa(hdu2544)
- hdu2544最短路——spfa
- HDU2544 spfa
- HDU2544 spfa
- HDU2066:一个人的旅行(spfa)
- ACM-最短路之一个人的旅行——hdu2066
- 最短路 hdu2544 (spfa)(模板)
- hdu2544(最短路SPFA模板)
- ACM学习感悟——POF3255 (用SPFA求次短路)
- hdu2544 最短路之spfa算法+链式前向星建图
- hdu2544及spfa模板
- spfa hdu2544 蓝桥
- spfa模板 hdu2544
- 最短路(弗洛伊德)——hdu2544
- HDU2544-最短路(dij堆优化与spfa)
- ACM模板——SPFA算法
- BlueTooth: 关于蓝牙你不可不知道的几个基础常识
- 黑马程序员——Objective-C学习之遍历字典
- 大数据分析与机器学习领域Python兵器谱
- 【LeetCode】Recover BinarySearch Tree
- PowerDesigner(二)-项目和框架矩阵
- ACM学习之路——HDU2544 HDU2066(spfa)
- 二分匹配题集
- Android View Scroller问答
- C++语言及网络编程书籍整理
- PowerDesigner(三)-企业架构模型
- NYOJ 题目63 小猴子下落(满二叉树的建立与遍历)
- ICE 原理学习
- laravel目录结构
- Fedora21安装RTEMS4.11编译环境(补充)