zoukankan      html  css  js  c++  java
  • 链式前向星+迪杰特斯拉堆优化

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=19999;
    int n,m,s,t;
    struct edge{
    	int nxt,to,w;
    }d[maxn];//链式前向星 
    struct node{
    	int num,x;
    	bool operator <(const node &tmp)const{
    		return x>tmp.x;
    	} //为了优先队列 
    }temp;
    int dis[maxn],head[maxn],cnt=1;
    void add(int u,int v,int w){
    	d[cnt].to=v;
    	d[cnt].nxt=head[u];
    	d[cnt].w=w;
    	head[u]=cnt++;
    }//加边
    int vis[maxn];
    void dij(int s)//迪杰特斯拉
    {
    	priority_queue<node>q;
    	memset(dis,20,sizeof(dis));
    	dis[s]=0;
    	temp.num=s;temp.x=0;q.push(temp);
    	while(!q.empty()){
    		node ans=q.top();
    		q.pop();
    		if(dis[ans.num]!=ans.x)		continue;
    		if(vis[ans.num])	continue;
    		vis[ans.num]=1;
    		for(int i=head[ans.num];i;i=d[i].nxt)
    		{
    			edge e=d[i];
    			if(dis[e.to]>dis[ans.num]+e.w){
    				dis[e.to]=dis[ans.num]+e.w;
    				if(vis[e.to])	continue;
    				temp.num=e.to,temp.x=dis[e.to];
    				q.push(temp);
    			}
    		}
    	}
    	return;
    } 
    int main()
    {
    	cin>>n>>m>>s>>t;
    	for(int i=1;i<=m;i++)
    	{
    		int l,r,t;
    		cin>>l>>r>>t;
    		add(l,r,t);
    		add(r,l,t);
    	}
    	dij(s);
    	cout<<dis[t];
    }
    
  • 相关阅读:
    mysql对表操作的各种语句
    Map遍历两种方式
    hibernate3
    Spring、mybaits整合
    mybaits注解
    mybaits 框架运用
    mybatis入门
    限制文本框字符数
    Unity3D Mathf函数
    Unity3d 粒子工具注释
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12679617.html
Copyright © 2011-2022 走看看