首页 > 其他分享 >2024/12/5日工作总结

2024/12/5日工作总结

时间:2024-12-18 11:20:50浏览次数:5  
标签:总结 12 arcs int LocateVex MVNum 2024 AMGraph 输入

完成数据结构pta实验7-2 迪杰斯特拉方法实现最短路径

用迪杰斯特拉算法实现有向网的最短路径

输入格式:
第一行输入有向网的顶点和边数,第二行输入各顶点值,用空格间隔,第三行开始输入各条边的 两个点的及边上的权值,用空格间隔。最后一行输入要求路径的两个顶点。

输出格式:
输出最短路径经过的各顶点,中间用-->连接。

输入样例:
在这里给出一组输入。例如:

6 8
0 1 2 3 4 5
0 2 10
0 4 30
0 5 100
1 2 5
2 3 50
3 5 10
4 3 20
4 5 60
0 3
输出样例:
在这里给出相应的输出。例如:

0-->4-->3

点击查看代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

#define MaxInt 32767
#define MVNum 100

typedef int ArcType;
typedef struct{
    int vexs[MVNum];
    ArcType arcs[MVNum][MVNum];
    int vexnum,arcnum;
}AMGraph;

int LocateVex(AMGraph G,int v){
    for(int i = 0;i<G.vexnum;i++){
        if(G.vexs[i] == v)
            return i;
    }
    return -1;
}

void CreateUDG(AMGraph &G){
    cin>>G.vexnum>>G.arcnum;
    for(int i=0;i<G.vexnum;i++){
        cin>>G.vexs[i];
    }
    for(int i=0;i<G.vexnum;i++){
        for(int j=0;j<G.vexnum;j++)
            G.arcs[i][j]=MaxInt;
    }
    for(int k = 0;k<G.arcnum;k++){
        int v1,v2,w;
        cin>>v1>>v2>>w;
        int i = LocateVex(G,v1);
        int j = LocateVex(G,v2);
        if(i != -1&&j != -1){
            G.arcs[i][j]=w;
            G.arcs[j][i]=G.arcs[i][j];
        }
    }
    
}

void ShortestPath_DIJ(AMGraph G,int v0,int v){
    int n = G.vexnum;
    vector<int> S(n,0);
    vector<int> D(n,MaxInt);
    vector<int> Path(n,-1);
    
    for(int v=0;v<n;v++){
        D[v]=G.arcs[v0][v];
        if(D[v]<MaxInt){
            Path[v]=v0;
        }
    }
    S[v0]=true;
    D[v0]=0;

    for(int i=1;i<n;i++){
        int min = MaxInt;
        int v = -1;
        for(int w=0;w<n;w++){
            if(!S[w]&&D[w]<min){
                v = w;
                min = D[w];
            }
        }
        S[v]=true;
        for(int w=0;w<n;w++){
            if(!S[w]&&(D[v]+G.arcs[v][w]<D[w])){
                D[w]=D[v]+G.arcs[v][w];
                Path[w]=v;
            }
        }
    }

    vector<int>shortestPath;
    for(int i=v;i!=-1;i=Path[i]){
        shortestPath.push_back(i);
    }
    reverse(shortestPath.begin(),shortestPath.end());

    for(size_t i=0;i<shortestPath.size();i++){
        if(i>0)
            cout<<"-->";
        cout<<G.vexs[shortestPath[i]];
    }
}


int main(){
    AMGraph G;
    CreateUDG(G);
    int start,end;
    cin>>start>>end;
    ShortestPath_DIJ(G,LocateVex(G,start),LocateVex(G,end));
    return 0;
}

标签:总结,12,arcs,int,LocateVex,MVNum,2024,AMGraph,输入
From: https://www.cnblogs.com/zhanglijian/p/18614396

相关文章

  • goland2024如何安装?附安装包和激活方式
    前言大家好,我是小徐啊。goland是我们开发Go语言时的常用的开发工具,功能强大,今天,小徐就来介绍下如何安装和获取激活方式。文末附获取方式。如何安装和激活goland首先,我们双击下goland2024安装包,开始安装。然后,我们点击下运行按钮。然后,我们点击下一步按钮。然后,我们选择要......
  • 2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组 points 和一个字符串 s,其中
    2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组points和一个字符串s,其中points[i]表示第i个点的坐标,s[i]表示第i个点的标签。如果一个正方形的中心在(0,0),边与坐标轴平行,并且内部没有标签相同的两个点,则称这个正方形为“合法”的。你的任务是返回可以被“合......
  • 电脑为什么会提示“msvcr120.dll缺失”?“找不到msvcr120.dll文件”要怎么解决?
    电脑故障排查指南:揭秘“msvcr120.dll缺失”的真相与解决方案在软件开发与日常维护的广阔天地里,遇到系统报错或文件缺失的情况可谓家常便饭。今天,我将带领大家深入探讨一个常见的系统提示——“msvcr120.dll缺失”,并揭秘其背后的原因及有效解决方案。通过这一探讨,希望能帮助大......
  • 鸿蒙Next创建自定义组件总结
    一、引言在鸿蒙Next开发中,自定义组件是构建高效、可维护UI的重要组成部分。它具有可组合、可重用以及数据驱动UI更新等特点,能帮助开发者更好地实现代码复用、业务逻辑与UI分离等目标。本文将详细总结创建自定义组件的相关知识,包括其基本结构、成员函数/变量、参数规定、build()函......
  • 发点牢骚(20241217)
    我个人表示不要把一些东西发在一些论坛,社区和公开区域。(尤其是NGA)最近部分平台有了挖坟挂人的征兆,这使得我感觉“沟通成本”太高了,因为总有傻X喜欢开天眼,喜欢以现在的角度强行评价过去的事,你们天天发个帖子评价啥东西的过去,你能回到2000年吗?回不到就别提了。我一直认为讨论历......
  • 12.17学习总结
    1.结构体学习(学完哒)    2.写了英语作业~ 3.p1162题代码已经敲出来哒,但是运行仍存在问题,我需再努力下 ......
  • 2024.12.17
    根据您提供的代码和错误信息,问题在于您尝试将Page<Policy>对象直接传递给page方法,但是page方法期望的是一个实现了IPage接口的对象。Page类是IPage接口的一个实现,所以您可以直接使用Page类,但是需要确保您使用的是正确的类型参数。您的代码中出现的错误提示表明,您可......
  • 12.5
    2-使用更好的算法选择一个最优算法对性能优化的效果最大。各种优化手段都能改善程序的性能。它们可以压缩以前看似低效的代码的执行时间,就像通过升级 PC 能让程序运行得更快一样。但不幸的是,如同升级 PC 一样,大部分优化手段只能使程序性能呈线性提升。许多优化手段可以将程序......
  • 12.4
    c++性能优化策略 1-用好的编译器并用好编译器C++ 编译器是非常复杂的软件构件。每种编译器为 C++ 语句生成的机器码都有差别。它们所看到的优化机会是不同的,会为相同的源代码产生不同的可执行文件。如果打算为代码做出最后一丁点性能提升,那么你可以尝试一下各种不同的编......
  • 12.3
    说“性能无所谓”的同事也可能是想说性能对于某些特殊的应用程序——例如受人体反应约束或运行于处理器速度极快的桌面计算机上的应用程序——无所谓。但对于那些运行于内存、电源或者处理速度受限的小型嵌入式设备和移动处理器上的应用程序来说,性能的影响非常大;对于那些运行于......