例题11.6畅通工程续

/*
不同于最小生成树是对边排序,
最短路径是对点到起点的距离排序

memset可以初始化整个结构体,但只能初始化为0或-1,结构体内指针会变为NULL
#include<ctring>

fill(arr,arr+n,要赋的值)
fill不能初始化整个结构体,但可以任意赋值
除数组外,vector也可以用这种方法赋值:fill(v.begin(),v.end(),要赋的值)
#include<algorithm>

先存这个
vector<Edge> graph[1000];//1~999
//所有点的相邻点及其距离???

再初始化这个
int dis[200];//0~199
//点到起点的距离

最后BFS

*/
#include <iostream>
#include <queue>
#include <climits>
#include<algorithm>
#include <cstring>
using namespace std;

const int INF=INT_MAX;

struct Point
{
    int id;//0~200
    int distance;
    bool operator<(const Point&amp; p)const
    {
        return distance>p.distance;
    }
    Point (int i,int d)
    {
        id=i;
        d=distance;
    }
};

struct Edge{
    //double from;
    int to;//双向边分成了两条
    int length;
    Edge(int t,int l)
    {
        to=t;
        length=l;
    }
};

vector<Edge> graph[1000];//1~999
//所有点的相邻点及其距离???

int dis[200];//0~199
//每个点到起点的距离

//BFS
void Dijkstra(int s)//源点s
{
    priority_queue<Point> q;
    dis[s]=0;
    q.push(Point(s,dis[s]));//源点入队
    while(!q.empty())
    {
        int u=q.top().id;//距离最小的边的点的id
        q.pop();
        for(int i=0;i<graph[u].size();i++)//对当前点的所有相连点进行距离更新
        {
            int v=graph[u][i].to;//相连点的编号
            int d=graph[u][i].length;//相连点的距离
            if(dis[v]>dis[u]+d)
            {
                dis[v]=dis[u]+d;
                q.push(Point(v,dis[v]));
            }

        }

    }
}

int main() {
    int n,m;//点数量,边数量
    while (cin >>n>>m) { 

       fill(dis,dis+n,INF);
       
       memset(graph,0,sizeof(graph));//不能用fill(graph,graph+1000,0);因为fill不能初始化结构体

        for(int i=1;i<=m;i++)
        {
            int from,to,length;
            cin>>from>>to>>length;
            graph[from].push_back(Edge(to,length));
            graph[to].push_back(Edge(from,length));
        }

        int s,t;//起点,终点
        cin>>s>>t;
        Dijkstra(s);
        
        if(dis[t]==INF)dis[t]=-1;
        cout<<dis[t]<<endl;

    }
}
全部评论

相关推荐

03-17 20:47
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务