dijkstra模板
来源:互联网 发布:都市星际淘宝交易商 编辑:程序博客网 时间:2024/06/05 07:31
const int MAXN = 5 + 1e3;const int MAXE = 5 + 1e5;typedef int ElementType;struct Edge{ int to, next; ElementType w; Edge() {}; Edge(int to, ElementType w, int next): to(to), w(w), next(next) {};}edge[MAXE];int head[MAXN], no;void init(){ memset(head, -1, sizeof(head)); no = 0;}void add(int from, int to, ElementType w){ edge[no] = Edge(to, w, head[from]); head[from] = no++;}ElementType dist[MAXN];int pre[MAXN]; //用于输出路径typedef pair PEI;void dijkstra(int start){ for(int i=0;i<MAXN;i++) dist[i] = INF; dist[start] = 0; priority_queue<PEI, vector, greater > pq; pq.push(PEI(0, start)); while(!pq.empty()) { PEI tmp = pq.top(); pq.pop(); int u = tmp.second; if(dist[u] < tmp.first) continue; for(int i = head[u]; i!=-1; i=edge[i].next) { Edge &e=edge[i]; if(dist[u] + e.w < dist[e.to]) { dist[e.to] = dist[u] + e.w; pre[e.to] = u;//用于输出路径 pq.push(PEI(dist[e.to],e.to)); } } }}void path(int from, int to)//用于输出路径{ if (from == to) { printf("%d", to); return; } path(from, pre[to]); printf(" %d", to);}//how to useint main(){//1.建图:输入节点数n,边数mint n, m;scanf("%d%d", &n, &m);init(); //初始化图while (m--){int u, v, w;scanf("%d%d%d", &u, &v, &w);add(u, v, w);}//2.调用dijkstra(1);//3.查询路径int v;scanf("%d", &v);path(1, v);printf("\n");return 0;}
0 0
- dijkstra 模板
- dijkstra 模板
- Dijkstra模板
- dijkstra模板
- dijkstra模板
- Dijkstra模板
- (Dijkstra模板)
- Dijkstra模板
- Dijkstra模板
- Dijkstra 模板
- Dijkstra模板
- dijkstra 模板
- dijkstra模板
- dijkstra模板
- dijkstra模板
- [模板]Dijkstra
- dijkstra 模板
- 模板 Dijkstra
- 从ImageView中获取图像转为Bitmap对象
- JMeter性能测试学习笔记——几个性能测试知识点
- linux入门_1 如何理解dev和挂载点
- python | 对时间点的处理
- Swiperefreshlayout与Recyclerview下拉刷新和上拉加载
- dijkstra模板
- Mybatis学习总结(五).动态SQL与Mybatis缓存
- 博为峰Java技术文章 ——JavaSE Swing JRootPane面板I
- Java并发编程之volatile关键字解析
- day29:Client
- 4种输出模式
- 解压文件夹下所有压缩包文件,并将压缩包下多层文件夹下文件拷贝至压缩包名文件夹下
- 读写cookie
- 树-堆结构练习——合并果子之哈夫曼树