【学习总结】2401230_数据结构与算法(五)

  • 《大话数据结构》读书笔记+课程补充
  •  每日一个例题示范

一、读书笔记+课程补充

(50页)

分析算法时间复杂度的基本方法 尽量简化

【学习总结】2401230_数据结构与算法(五)_第1张图片

取数量级符号"O" 

【学习总结】2401230_数据结构与算法(五)_第2张图片选择最高次 再化简O(n^2)

时间复杂度是由嵌套最深层语句的频度决定的。

分析时间复杂度的例题 循环执行推导:找到执行次数

【学习总结】2401230_数据结构与算法(五)_第3张图片

最后取时间复杂度为T(n)=O(log2 n)

二、每日一个例题示范

高手去散步

题目描述

鳌头山上有 �n 个观景点,观景点两两之间有游步道共 �m 条。高手的那个它,不喜欢太刺激的过程,因此那些没有路的观景点高手是不会选择去的。另外,她也不喜欢去同一个观景点一次以上。而高手想让他们在一起的路程最长(观景时它不会理高手),已知高手的穿梭机可以让他们在任意一个观景点出发,也在任意一个观景点结束。

输入格式

第一行,两个用空格隔开的整数 �n 、 �.m. 之后 �m 行,为每条游步道的信息:两端观景点编号、长度。

输出格式

一个整数,表示他们最长相伴的路程。

#include 
#include 
#include 

using namespace std;

const int INF = 1e9;

int main() {
    int n, m;
    cin >> n >> m;

    // 创建邻接矩阵表示图,初始化为无穷大
    vector> graph(n + 1, vector(n + 1, INF));

    // 读取游步道的信息
    for (int i = 0; i < m; ++i) {
        int u, v, w;
        cin >> u >> v >> w;
        graph[u][v] = graph[v][u] = w;  // 无向图
    }

    // 使用动态规划计算最短路径
    for (int k = 1; k <= n; ++k) {
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= n; ++j) {
                graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j]);
            }
        }
    }

    // 寻找最长相伴的路程
    int result = 0;
    for (int i = 1; i <= n; ++i) {
        for (int j = i + 1; j <= n; ++j) {
            if (graph[i][j] != INF) {
                result = max(result, graph[i][j]);
            }
        }
    }

    cout << result << endl;

    return 0;
}

分析:头文件是标准库中的

定义常量表示无穷大 用于初始化邻接矩阵中的距离 表示两节点之间无直接连接

标准输入读取两个整数 n和m

然后读取周边步道信息

最后寻找最长相伴路程。

你可能感兴趣的:(学习)