zoukankan      html  css  js  c++  java
  • 1003 Dijkstra算法

    #include<stdio.h>
    #include<string.h>
    #define MAXVEX 100 // 定义的最大定点数
    #define INFINITY 65535 //定义一个极大数
    int final[MAXVEX];//为1即代表当前坐标的最短路径已经找到
    int map[MAXVEX][MAXVEX];//代表权值
    int m,n;//分别表示几个城市
    int num[MAXVEX];//最短路径条数
    int team[MAXVEX];//可集结的最多救援队数量
    int dis[MAXVEX];//存放所有结点的权值
    int city[MAXVEX];//代表救援队的数目
    int c1,c2;//初始结点和目标结点

    int main()
    {
    void Dijkstra();
    scanf("%d %d %d %d",&m,&n,&c1,&c2); //m代表城市数量,n代表路数量
    memset(final,0,n);//将所有节点设置为未被访问
    for(int i=0;i<m;++i)
    {
    scanf("%d",&city[i]);//给城市数量的救援人数赋值
    }
    for(int i=0;i<m;++i)
    {
    for(int j=0;j<m;++j)
    {
    //给每条路赋权值,注意是所有路都赋极大值INFINITY
    map[i][j] = INFINITY;
    }

    }
    for(int i=0;i<n;++i)//给n条路设定值
    {

    int start,end,length;// 起点,终点,起点到终点的权值
    scanf("%d %d %d",&start,&end,&length);
    map[start][end] = length;
    map[end][start] = length;//双向赋值
    }
    Dijkstra();
    printf("%d %d",num[c2],team[c2]);
    return 0;

    }

    void Dijkstra(){
    int ct;//设置一个中间节点
    for(int i=0;i<m;++i){
    //把到没个结点的权值都存放入数组中
    dis[i] = map[c1][i];//从c1开始
    }
    memset(num,0,m);//给m个结点的最短路径条数都初始化为0
    memset(team,0,m);//给m个结点的救援人员总数量都初始化为0
    num[c1] = 1;//表示c1这个节点的路径为1
    dis[c1] = 0;//到c1的权值为0;
    team[c1] = city[c1];
    ct = -1;//将中间结点赋值为-1做标记
    while(c1!=c2){
    int min = INFINITY;//设置一个最小距离值
    for(int i=0;i<m;++i)
    {
    if(!final[i]&&dis[i]<min){
    min = dis[i];
    ct = i;//此ct相当于【大话数据结构】dijastra算法中的k
    }
    }
    final[ct] = 1;//表示当前结点的最短路径已经求得
    for(int i=0;i<m;++i) {//这个循环尤其重要,用来修正路径权值 *****************************
    if(!final[i]){
    if(dis[i]>min+map[ct][i]){
    dis[i] = min + map[ct][i];
    team[i] = city[i]+team[ct];
    num[i] = num[ct];

    } else if(dis[i] == min + map[ct][i])
    {
    num[i] = num[i] + num[ct];
    if(team[i]<team[ct]+city[i])
    team[i] = team[ct] + city[i];
    }
    }
    }
    }
    }

  • 相关阅读:
    合代码、merge代码
    springboot 获取项目版本
    软考复习思路之疫情来的太突然之备战明年软考中级之软件设计师
    供应链管理笔记 概述2
    供应链管理笔记
    供应链管理 流程与实施1
    Winform中内嵌显示Office
    数据库提交数据注意事项
    工业互联网
    C#利用using System.Net实现Json数据提交WebAPI
  • 原文地址:https://www.cnblogs.com/purpleone/p/10822421.html
Copyright © 2011-2022 走看看