zoukankan      html  css  js  c++  java
  • 堆优化 dijkstra +路径输出

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <queue>
    #include <bits/stdc++.h>
    
    using namespace std;
    const int N = 10010;
    const int oo = 99999999;
    
    int dis[N], pre[N];
    bool vis[N];
    int n, m, S;
    struct Node{
    	int u, v, w;
    	Node(int u, int v, int w):u(u), v(v), w(w) {}
    };
    struct Headnode{
    	int dis_this, u;
    	bool operator < (const Headnode& now) const
    	{
    		return dis_this > now.dis_this;
    	}
    };
    vector <int> G[N];
    vector <Node> EE;
    
    inline int read()
    {
    	int x = 0; char c = getchar();
    	while(c < '0' || c > '9')c = getchar();
    	while(c >= '0' && c <= '9')x = x * 10 + c - '0', c = getchar();
    	return x;
    }
    
    inline void dijkstra(int start)
    {
    	priority_queue <Headnode> Q;
    	for(int i = 1; i <= n; i ++)
    		dis[i] = oo;
    	dis[start] = 0;
    	memset(vis, 0, sizeof(vis));
    	Headnode HHH;
    	HHH.dis_this = 0;
    	HHH.u = start;
    	Q.push(HHH);
    	while(!Q.empty())
    	{
    		Headnode topp = Q.top();
    		Q.pop();
    		int u = topp.u;
    		if(vis[u])
    			continue;
    		for(int i = 0; i < G[u].size(); i ++)
    		{
    			Node e = EE[G[u][i]];
    			if(dis[e.v] > dis[u] + e.w)
    			{
    				dis[e.v] = dis[u] + e.w;
    				pre[e.v] = G[u][i];
    				Q.push((Headnode) {dis[e.v], e.v});
    			}
    		}
    	}
    }
    
    inline void add(int u,int v,int w)
    {
    	EE.push_back(Node(u, v, w));
    	G[u].push_back(EE.size() - 1);
    }
    
    int main()
    {
    	n = read();
    	m = read();
    	S = 1;
    	
    	for(int i = 1; i <= m; i ++)
    	{
    		int u = read();
    		int v = read();
    		int w = read();
    		add(u, v, w);
    	}
    	dijkstra(S);
    	while(1)
    	{
    		int endd = read();
    		printf("%d",dis[endd]);
    	}
    	return 0;
    }
    /*
    5 7
    1 2 4
    1 3 6
    1 5 50
    2 3 5
    3 5 7
    3 4 8
    4 5 9
    */
    

      

  • 相关阅读:
    easyExcel入门
    UML-从需求到设计--迭代进化
    UML-操作契约总结
    102. Binary Tree Level Order Traversal
    98. Validate Binary Search Tree
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    94. Binary Tree Inorder Traversal
    84. Largest Rectangle in Histogram
    92. Reverse Linked List II
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/7354165.html
Copyright © 2011-2022 走看看