poj2449 (重要)优先队列
来源:互联网 发布:php do while 编辑:程序博客网 时间:2024/06/05 02:52
#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <queue>using namespace std;const int inf = 99999999;const int M = 1005;int dist[M];int vist[M];int num[M];struct node { int u; int w; node (int uu, int ww): u(uu), w(ww){} //初始化结构体中元素。};struct Node { int u; int len; Node (int uu, int ww): u(uu), len(ww){} friend bool operator <(Node a, Node b) { return a.len + dist[a.u] > b.len + dist[b.u]; //这里很关键, //此点到起点的距离和给点到终点的距离,和相对小时入队列,运用了启发式收索, }};vector<node>g[M], rg[M];int n, m, k, s, e;void spfa(int v) { for(int i = 0; i <= n; i++) { dist[i] = inf; vist[i] = 0; } dist[v] = 0; queue<int>que; que.push(v); while(!que.empty()) { int v = que.front(); que.pop(); vist[v] = 0; for(int i = 0; i < rg[v].size(); i++) { node p = rg[v][i]; if(dist[p.u] > dist[v] + p.w) { dist[p.u] = dist[v] + p.w; if(!vist[p.u]) { que.push(p.u); vist[p.u] = 1; } } } }}int A_star(int s) { if(dist[s] == inf) return -1; memset(num, 0, sizeof(num)); priority_queue<Node> que; que.push(Node(s, 0)); while(!que.empty()) { Node p = que.top(); que.pop(); int u = p.u; int len = p.len; num[u]++; if(num[e] == k) return len; for(int i = 0; i < g[u].size(); i++) { node q = g[u][i]; que.push(Node(q.u,len+q.w)); } } return -1;}int main(){ int x, y, d; while(scanf("%d%d", &n, &m)!= EOF) { for(int i = 0; i <= n; i++) { g[i].clear(); rg[i].clear(); } for(int i = 1; i <= m; i++) { scanf("%d%d%d", &x, &y, &d); g[x].push_back(node(y, d)); rg[y].push_back(node(x, d)); //建立反图, } scanf("%d%d%d", &s, &e, &k); if(s == e) k++; spfa(e); int ans = A_star(s); printf("%d\n",ans); } return 0;}
0 0
- poj2449 (重要)优先队列
- POJ2449-第K短路,Astar,优先队列
- poj2449-A*算法+优先队列+第k最短路
- POJ2449
- POJ2449
- poj2449
- poj2449
- 左式堆(优先队列)
- 优先队列(堆)
- hdu4006(优先队列)
- 优先队列(priority_queue)
- 优先队列(堆)
- hdu3873 (优先队列)
- priority_queue(优先队列)
- 优先队列(堆)
- UVA1203Argus(优先队列)
- 优先队列(二)
- Stones(优先队列)
- Java程序中的“内存泄漏”问题
- 请判断一个串中的括号是否匹配 注意下列不匹配的情况: 左括号太多 右括号太多 右括号先于左括号出现 ..)...(... 挎臂情况 ....[...(....]....)....
- PCNN(3)图像增强
- Exercise 30: Else 和 If
- FPGA FIFO
- poj2449 (重要)优先队列
- c++学习日记之复数的运算
- 2014-03-30
- 限制远程桌面连接的时间
- C#总结
- mysql在linux下的my.cnf文件在哪里!
- 从头开始
- 一个简单的购物系统
- Java实验1,2