首页 > 其他分享 >设计可以求最短路径的图类

设计可以求最短路径的图类

时间:2023-05-27 13:55:22浏览次数:29  
标签:图类 int graph 路径 edge vector Graph 设计

类包括根据顶点数和边初始化的构造函数,添加边,求两点最短路径等函数

1. 邻接矩阵

class Graph {
private:
    vector<vector<int>> graph;
public:
    Graph(int n, vector<vector<int>>& edges) {
        graph.resize(n,vector<int>(n,INT_MAX/2));
        for(auto&edge:edges){
            int from = edge[0];
            int to = edge[1];
            graph[from][to] = edge[2];
        }
    }
    
    void addEdge(vector<int> edge) {
        int from = edge[0];
        int to = edge[1];
        graph[from][to] = edge[2];
    }
    
    int shortestPath(int node1, int node2) {
        int n = graph.size();
        vector<bool> vis(n);
        vector<int> dis(n,INT_MAX/2);
        dis[node1] = 0;
        for(int times=0;times<n;times++){//最多遍历n次
            int cur = -1;
            for(int i=0;i<n;i++){//贪心找最小值
                if(vis[i]||dis[i]==INT_MAX/2) continue;//跳过已经选取的点和无法到达的点
                if(cur==-1||dis[i]<dis[cur]) cur = i;
            }
            if(cur==-1) return -1;//表示无法到达目标
            if(cur==node2) break; //找到目标直接跳出,此时dis[cur]即为最短路径,无需再更新
            vis[cur] = 1;
            //找到当前最近点后,根据最近点进行更新
            for(int i=0;i<n;i++){
                if(vis[i]||graph[cur][i]==INT_MAX/2) continue;//对应点已选取,或对应的边不存在,无需更新
                dis[i] = min(dis[i],dis[cur]+graph[cur][i]);
            }
        }
        return dis[node2]==INT_MAX/2?-1:dis[node2];
    }
};

标签:图类,int,graph,路径,edge,vector,Graph,设计
From: https://www.cnblogs.com/929code/p/17436650.html

相关文章

  • AI辅助产品设计
    AI技术在辅助产品设计领域的应用日益广泛。以下是一些AI技术及其在产品设计中的应用:1.设计数据挖掘:AI可以从大量的设计数据中发现模式、趋势和关联,为设计师提供有价值的见解和建议。通过使用自然语言处理和文本挖掘技术,AI可以分析用户反馈、设计趋势等信息,为设计师提供灵感和方向......
  • ABAP-屏幕设计-上门拜访动态切换
    *&---------------------------------------------------------------------**&ReportZHQ_01_04*&*&---------------------------------------------------------------------**&*&*&-------------------------------------------------......
  • 2023年国际大学生程序设计竞赛(ACM-ICPC)新疆赛区 A.The Number Of Black Edges
    传送门大致题意:  爱丽丝得到一棵树,树上有n个节点,索引从1到n。树上的每条边可以是黑色或白色,所有的边最初都是白色的。有三种操作:1.将一条边的颜色改为黑色。2.将一条边的颜色改为白色。3.3.给定一个节点索引,计算从所有奇数节点到该节点的简单路径上的黑色边的数量之和。请......
  • 实验二 数据库安全性与完整性设计与实践
    实验二数据库安全性与完整性设计与实践20201331黄文刚一、实验目的1.系统梳理常规的数据库安全性与完整性技术;2.了解所选用DBMS的安全性控制和完整性约束机制;3.能够在特定的DBMS上进行具体实践。二、实验要求1.能够根据特定的应用进行基于应用场景的安全性与完整性设计,并落实......
  • 3.2 逻辑设计和硬件控制语言HCL
    在硬件设计中,用电子电路来计算对位进行运算的函数,以及在各种存储器单元中存储位。大多数现代电路技术都是用信号线上的高电压或低电压来表示不同的位值。在当前的技术中,逻辑1是用1.0伏特左右的高电压表示的,而逻辑0是用0.0伏特左右的低电压表示的。要实现一个数字系统需要三个主要......
  • 浏览器驱动如果手动下载放置的路径
    1、本地chrome.exe同级目录:无需在代码中声明驱动的位置,会自动寻找并匹配2、IDE项目自定义位置(改方法搜索,未验证)位置可以自己指定比如将驱动放在项目根路径D:a-projectmqtest需要在代码中指明driver的路径(绝对路径或相对路径),代码如下:System.setProperty("webdriver.chrom......
  • 设计模式-观察者模式(Observer)
    一、 观察者(Observer)模式观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通......
  • 领域驱动设计-软件核心复杂应对之道:第八章
    第三部分通过重构来加深理解要想成功地开发出实用的模型,需要注意以下三点复杂巧妙地领域模型是可以实现的,也是值得我们去花费力气实现的这样的模型离开不断地重构是很难开发出来的,重构需要领域专家和热爱学习领域知识的开发人员密切参与进来要实现并有效地运用模型,需要精通......
  • C语言程序设计-谭浩强(第五版)
    第1章程序设计和C语言1.1什么是计算机程序1.2什么是计算机语言1.3C语言的发展及其特点1.4最简单的C语言程序1.4.1最简单的C语言程序举例1.4.2C语言程序的结构1.5运行C程序的步骤与方法1.6程序设计的任务第2章算法——程序的灵魂2.1程序=算法+数据结构2.2什么是算法......
  • 设计模式-行为型设计模式
    责任链模式定义为请求创建一个接收此次请求的链适用场景一个请求的处理需要多个对象当中的一个或几个协作处理优点请求的发送者和接收者(请求的处理)解耦责任链可以动态组合缺点责任链太长或者处理时间过长,影响性能责任链有可能过多/**处理者--或者Approver*@author......