• 练习备份2


    int n,G[MAXV][MAXV];
    int d[MAXV];
    bool vis[MAXV]={false};
    void Dijkstra(int s)
    {
        fill(d,d+MAXV,INF);
        d[s]=0;
        for(int i=0;i<n;i++)
        {
            int u=-1,MIN=INF;
            for(int j=0;j<n;j++)
            {
                if(!vis[j] && d[j]<MIN)
                {    
                    u=j;
                    MIN=d[j];
                }    
            }
            if(u==-1) return ;
            vis[u]=true;
            for(int v=0;v<n;v++)
            {
                if(vis[v]==false && G[u][v]!=INF && d[u]+G[u][v]<d[v])
                {
                    d[v]=d[u]+G[u][v];
                }
            }    
        }    
    } 
    
    
    
    struct Node{
        int v,dis;
    };
    vector<Node>Adj[MAXV];
    bool vis[MAXV];
    void Dijkstar(int s)
    {
        fill(d,d+MAXV,INF);
        d[s]=0;
        for(int i=0;i<n;i++)
        {
            int u=-1,MIN=INF;
            for(int j=0;j<n;j++)
            {
                if(vis[j]==false && d[j]<MIN)
                {
                    u=j;
                    MIN=d[j];
                }
            }
            if(u==-1) return ;
            vis[u]=true;
            for(int j=0;j<Adj[u].size();j++)
            {
                int v=Adj[u][j].v;
                if(vis[v]==false && d[u]+Adj[u][j].dis<d[v])
                {
                    d[v]=d[u]+Adj[u][j].dis;
                }
            }
        }
    }
    
    
    
    
    #include<vector>
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
    struct Node{
        int v,dis;
    };
    //struct Node2{
    //    int v,d,vis;
    //    friend bool operator<(const Node2 &x,const Node2 &y)
    //    {
    //        if(x.vis!=y.vis) return x.vis > y.vis;
    //        return x.d<y.d;
    //    }
    //};
    const int MAXV = 1000;
    const int INF = 0xFFFFFFF;
    vector<Node>Adj[MAXV];
    int n,m,d[MAXV];
    bool vis[MAXV]={false};
    void Dijkstra(int s)
    {
        fill(d,d+MAXV,INF);
        d[s]=0;
        //priority_queue<Node2>q;
        //Node2 temp;
        //for(int i=0;i<n;i++)
        //{
        //    temp.d=d[i]; temp.v=i; temp.vis=0;
        //    q.push(temp);
        //}
        for(int i=0;i<n;i++)
        {
            int u=-1,MIN=INF;
            //temp=q.front(); q.pop();
            //if(temp.vis==true || temp.d==INF) return ;
            //temp.vis=true;
            
            //for(int j=0;j<n;j++)
            //{
            //    if(vis[j]==false && d[j]<MIN)
            //    {
            //        u=j;
            //        MIN=d[j];
            //    }
            //}
            //if(u==-1) return ;
            vis[u]=true;
            for(int j=0;j<Adj[u].size();j++)
            {
                int v=Adj[u][j].v;
                if(vis[v]==false && d[u]+Adj[u][j].dis<d[v]) 
                {
                    d[v]=Adj[u][j].dis+d[u];
                }
            }
        }
    }
    int main(void)
    {
        int s , u , v;
        Node edge;
        cin >> n >> m >> s;
        for(int i=0;i<m;i++)
        {
            cin >> u >> edge.v >> edge.dis;
            Adj[u].push_back(edge);
        }
        Dijkstra(s);
        for(int i=0;i<n;i++) printf("%d ",d[i]);
        return 0;    
    } 
    /*
     6 8 0
     0 1 1 
     0 3 4 
     0 4 4 
     1 3 2 
     2 5 1 
     3 2 2 
     3 4 3 
     4 5 3
    */
  • 相关阅读:
    selenium+python常用函数
    不同网络层的协议与工具
    Loudrunner编写WinSocket接口测试脚本
    python常见问题汇总
    Appium简介及工作原理
    Http协议详解
    Selenium 工作原理
    HTTP与HTTPS有哪些区别?
    【Appium】Appium工作原理(2)
    MySQL 必知必会学习笔记(常用命令二)
  • 原文地址:https://www.cnblogs.com/zuimeiyujianni/p/8835859.html
Copyright © 2020-2023  润新知