• dijstra模板


    【代码】

    dijstra模板

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<queue>
    #include<set>
    using namespace std;
    #define f(i,n) for(int i=1;i<=(n);i++)
    #define ll long long
    #define INF 1<<30
    #define N 100010
    #define M 200010
    #define pi pair<int,int>
    #define mp make_pair
    int n,m;
    int read()
    {
     	int x=0,f=1;char c=getchar();
     	while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
     	while( isdigit(c)){x=x*10+c-'0';c=getchar();}
     	return x*f;
    }
    struct xj
    {
    	int y;
    	int next;
    	int v;
    }map[2*M];
    int cnt;
    int head[N];
    void add_edge(int u,int v,int z)
    {
    	map[++cnt].y=v;
    	map[cnt].v=z;
    	map[cnt].next=head[u];
    	head[u]=cnt;
    }
    priority_queue<pi,vector<pi>,greater<pi> >q;
    int vis[N],dis[N];
    void dj()
    {
    	memset(vis,0,sizeof(vis));
    	f(i,n)dis[i]=INF;
    	while(q.size())q.pop();
    	dis[1]=0;
    	for(int i=head[1];i;i=map[i].next)
    	{
    		q.push(mp(map[i].v,map[i].y));
    		dis[map[i].y]=map[i].v;
    	}
    	while(q.size())
    	{
    		int v=q.top().second;
    		q.pop();
    		if(vis[v])continue;
    		vis[v]=1;
    		for(int i=head[v];i;i=map[i].next)
    		{
    			if(dis[map[i].y]>dis[v]+map[i].v)
    			{
    				dis[map[i].y]=dis[v]+map[i].v;
    				q.push(mp(dis[map[i].y],map[i].y));
    			}
    		}
    	}
    }
    int main()
    {
    	n=read();
    	m=read();
    	int u,v,z;
    	f(i,m)
    	{
    		u=read();
    		v=read();
    		z=read();
    	    add_edge(u,v,z);
    	    add_edge(v,u,z);
    	} 
    	dj(); 
    	f(i,n)printf("%d ",dis[i]);
    }
    
    
  • 相关阅读:
    .NET实现Excel文件的读写 未测试
    权限管理设计
    struts1中配置应用
    POJ 2139 Six Degrees of Cowvin Bacon(floyd)
    POJ 1751 Highways
    POJ 1698 Alice's Chance
    POJ 1018 Communication System
    POJ 1050 To the Max
    POJ 1002 4873279
    POJ 3084 Panic Room
  • 原文地址:https://www.cnblogs.com/qwerfcxs/p/7807687.html
Copyright © 2020-2023  润新知