zoukankan      html  css  js  c++  java
  • Dijkstra

    void Dijkstra(int u)
    {
    	memset(vis,0,sizeof(vis));
    	for(int t=1;t<=n;t++)
    	{
    		dis[t]=map[u][t];
    	}
    	vis[u]=1;
    	for(int t=1;t<n;t++)
    	{
    		int minn=Inf,temp;
    		for(int i=1;i<=n;i++)
    		{
    			if(!vis[i]&&dis[i]<minn)
    			{
    				minn=dis[i];
    				temp=i;
    			}
    		}
    		vis[temp]=1;
    		for(int i=1;i<=n;i++)
    		{
    			if(map[temp][i]+dis[temp]<dis[i])
    			{
    				dis[i]=map[temp][i]+dis[temp];
    			}
    		}
    	}
    	
    }
    
    const int maxn=1e6+10;
    const int maxm=1e7+10;
    const int inf=0x3f3f3f3f;
    struct Dijkstra
    {
    	struct Edge
    	{
    		int next,  to ,w;
    	} e[maxm];
    	int head[maxn],v[maxn],d[maxn],tol;
    	void add(int u, int v, int w)
    	{
    		tol++;
    		e[tol].to = v;
    		e[tol].next = head[u];
    		e[tol].w = w;
    		head[u] = tol;
    	}
    	priority_queue<pair<long long,int>,vector<pair<long long,int> >,greater<pair<long long,int> > >q1;
    	int dijkstra(int s,int t)
    	{
    		memset(d,inf,sizeof(d));
    		memset(v,0,sizeof(v));
    		d[s] = 0;
    		q1.push(make_pair(0, s));
    		while (!q1.empty())
    		{
    			int x = q1.top().second;
    			q1.pop();
    			if (!v[x])
    			{
    				v[x] = 1;
    				for (register int i = head[x]; i; i = e[i].next)
    				{
    					int to=e[i].to;
    					if (d[to] > d[x] + e[i].w)
    					{
    						d[to] = d[x] + e[i].w;
    						q1.push(make_pair(d[to], to));
    					}
    				}
    			}
    		}
    		return d[t];
    	}
    
    	void init()
    	{
    		memset(head, 0, sizeof(head));
    		tol = 0;
    	}
    } H;
    

      

  • 相关阅读:
    第十六周总结
    第十五周学习进度
    输出最长字符串链
    第二阶段冲刺10
    第二阶段冲刺09
    第二阶段冲刺08
    输入法评价
    第十四周进度总结
    collections模块
    shutil模块(了解)
  • 原文地址:https://www.cnblogs.com/Accpted/p/11191827.html
Copyright © 2011-2022 走看看