2030ssxx level
获赞
1
粉丝
0
关注
5
看过 TA
6
南京林业大学
2025
算法工程师
IP属地:江苏
暂未填写个人简介
私信
关注
/*不同于最小生成树是对边排序,最短路径是对点到起点的距离排序memset可以初始化整个结构体,但只能初始化为0或-1,结构体内指针会变为NULL#includefill(arr,arr+n,要赋的值)fill不能初始化整个结构体,但可以任意赋值除数组外,vector也可以用这种方法赋值:fill(v.begin(),v.end(),要赋的值)#include先存这个vector graph[1000];//1~999//所有点的相邻点及其距离???再初始化这个int dis[200];//0~199//点到起点的距离最后BFS*/#include #include #include #include#include using namespace std;const int INF=INT_MAX;struct Point{    int id;//0~200    int distance;    bool operator    { 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 graph[1000];//1~999//所有点的相邻点及其距离???int dis[200];//0~199//每个点到起点的距离//BFSvoid Dijkstra(int s)//源点s{    priority_queue 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        {            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        {            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    }}
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务