【C语言算法刷题】第2题 图论 dijkastra

news/2025/2/2 4:59:27/

题目描述

一个局域网内有很多台电脑,分别标注为 0 ~ N-1 的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用 t 表示

其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。如果最后有电脑不会感染,则返回-1。

给定一个数组 times 表示一台电脑把相邻电脑感染所用的时间。

如图:path[i] = {i, j, t} 表示:电脑 i->j,电脑 i 上的病毒感染 j,需要时间 t。

输入输出描述

输入

4
3
2 1 1
2 3 1
3 4 1
2

输出

2

 解释

第一个参数:局域网内电脑个数N,1 ≤ N ≤ 200;第二个参数:总共多少条网络连接第三个 2 1 1 表示2->1时间为1第六行:表示病毒最开始所在电脑号2

数据预处理

main(){int n;scanf("%d",&n);/*输入顶点的个数*//*初始化邻接矩阵*/int matrix[n+1][n+1];for(int i=0;i<=n;i++){for(int j=0;j<=n;j++){matrix[i][j]=-1;/*全部是离散的点*/}}/*输入边的条数m*/int m;scanf("%d",&m);/*输入邻接矩阵的边权重*/for(int i=0;i<m;i++){int u,v,w;scanf("%d %d %d",&u,&v,&w);matrix[u][v]=w;}/*输入源点src*/int src;scanf("%d",&src);}

必要的数据结构 

 /*是否已经被访问*/bool visited[n+1];/*用来存储src到每个顶点的最短距离*/int dist[n+1];/*初始化*/for(int i=1;i<=n;i++){visited[i]=FALSE;dist[i]=INT_MAX;/*距离初始化为正无穷*/}dist[src]=0;/*二维数组用于记录每个顶点的编号和到源点距离*/int pq[MAX_SIZE][2];int pq_size=0;pq[pq_size][0]=src;pq[pq_size][1]=dist[src];pq_size++;

dijkastra解决单源最短路径的主体代码 

    /*while队不空(数组pq[]实现的顺序队列)*/while(pq_size>0){/*每轮找dist最小的,出队列*/int u=pq[--pq_size][0];if(visited[u]==TRUE) continue;visited[u]=TRUE;/*设置当前选择的结点为已经访问*//*对u的所有邻居*/for(int v=1;v<=n;v++){int w=matrix[u][v];if(w!=-1){int newDist=dist[u]+w;if(newDist<dist[v]){dist[v]=newDist;pq[pq_size][0]=v;/*邻居v入队列pq[]*/pq[pq_size][1]=dist[v];pq_size++;/*按照路径最短进行降序排序*/qsort(pq,pq_size,sizeof(pq[0]),cmp);}}}       }

输出答案

    int sum=0;for(int i=1;i<=n;i++){sum+=dist[i];}printf("%d\n",sum);return 0;}

知识补充BFS和Dijkastra

 


http://www.ppmy.cn/news/1568607.html

相关文章

React 低代码项目:项目创建

Date: January 29, 2025 项目创建 思路&#xff1a; 使用 Create-React-App 创建 React 项目使用 Vite 创建 React 项目使用 eslint prettier husty 等&#xff0c;制定编码规则 创建项目 注&#xff1a;在这之前&#xff0c;推荐 node 版本&#xff1a;node/18.20.6 &#…

KNIME:开源 AI 数据科学

KNIME&#xff08;Konstanz Information Miner&#xff09;是一款开源且功能强大的数据科学平台&#xff0c;由德国康斯坦茨大学的软件工程师团队开发&#xff0c;自2004年推出以来&#xff0c;广泛应用于数据分析、数据挖掘、机器学习和可视化等领域。以下是对KNIME的深度介绍…

【4Day创客实践入门教程】Day1 工具箱构建——开发环境的构建

Day1 工具箱构建——开发环境的构建 目录 Day1 工具箱构建——开发环境的构建1.元件选型2.准备工具3. 开发板准备焊接排针具体步骤注意事项与技巧 4. 软件环境配置与固件烧录Thonny IDE软件环境配置配置Micropython环境与烧录固件**问题&#xff1a;**买的是4M/16M&#xff0c;…

系统架构设计师教材:信息系统及信息安全

信息系统 信息系统的5个基本功能&#xff1a;输入、存储、处理、输出和控制。信息系统的生命周期分为4个阶段&#xff0c;即产生阶段、开发阶段、运行阶段和消亡阶段。 信息系统建设原则 1. 高层管理人员介入原则&#xff1a;只有高层管理人员才能知道企业究竟需要什么样的信…

WPS添加文本超简单,批量操作不费劲-Excel易用宝

我们部门有这样一份销售记录表&#xff0c;C列月份中只有数字&#xff0c;老板让我们美化一下表格&#xff0c;在这个数字后面加一个月字。 我们部门小丽一马当先接下来这个活&#xff0c;我看她手速真快&#xff0c;一个小时输完了好几百行&#xff0c;我在旁边看着忍不住想笑…

Day30-【AI思考】-错题分类进阶体系——12维错误定位模型

文章目录 错题分类进阶体系——12维错误定位模型**一、认知层错误&#xff08;根源性缺陷&#xff09;****二、操作层错误&#xff08;执行过程偏差&#xff09;****三、心理层错误&#xff08;元认知障碍&#xff09;****四、进阶错误&#xff08;专业级陷阱&#xff09;** 错…

运算符重载(输出运算符<<) c++

我们来看下面这个Bug 报错1&#xff1a;打印整形&#xff08;int&#xff09;可以直接打印&#xff0c;打印字符&#xff08;char&#xff09;也可以直接打印&#xff0c;那是因为本身就已经给我们的内置类型准备好了一个输出运算符&#xff0c;可以直接用&#xff0c;但是我们…

Qt网络通信(TCP/UDP)

目录 一、TCP通信 1.QTcpServer 2.QTcpSocket 3.TCP通信基本流程 4.示例 二、UDP通信 1.QUdpSocket 2.UDP通信基本流程 3.发送形式 4.示例 一、TCP通信 QTcpServer和QTcpSocket是Qt中用于实现TCP通信的两个类。 1.QTcpServer QTcpServer类用于创建TCP服务器&#x…