OSPF 路由协议原型系统设计与实现

1.题目描述

参考计算机网络教材 164 页 OSPF 路由协议工作原理,在此基础上,实现一个简单的原型系统。主 要完成工作有:路由节点泛洪发布本地节点的链路信息,其它节点接收信息,构造网络拓扑,然后利 用 Dijkstra(或 Floyd)算法计算出到其它节点的最短路径,最后生成本节点的路由表。设计可以以下 图为例,其中 a 图是一个 6 节点的网络,每个节点生成自己的链路状态包(图 b),然后将其扩散至其 他节点。

fefbd8cb314a4b83920f06e6f14b73fb.png

在这里我们使用Floyd动态归划算法


2.程序Demo

47c0cbd2119d47b7a4a84e7e90cf8d44.png


3.参考代码

//Coder:MGJ
//Time:2024.1.4
#include <iostream>
#include <cstring>
using namespace std;
#define INF 0x3f3f3f3f
const int maxx = 1e3 + 7;
int G[maxx][maxx];//存图数组
int path[maxx][maxx];//path[i][j]记录从i到j经过了那个点过来的
int n;//节点数
void init() {memset(G, INF, sizeof G);//初始化数组memset(path, -1, sizeof path);for (int i = 0; i < maxx; i++)//到自己的距离为0G[i][i] = 0;
}void Floyd() {                                     //三重循环for (int k = 1; k <= n; k++) {                 //选中的中间值for (int i = 1; i <= n; i++) {             //数组横坐标for (int j = 1; j <= n; j++) {         //数组纵坐标if (G[i][j] > G[i][k] + G[k][j]) { //如果以k中间点为中间点检测到路径更短G[i][j] = G[i][k] + G[k][j];   //更新路径值path[i][j] = k;                //更新要经过的中间点}}}}
}void ptf(int u, int v) {cout << u << "->";while (path[u][v] != -1) {u = path[u][v];cout << u << "->";}cout << v << endl;
}void init_data() {int demo_Data[6][6] = {{0,   4, INF, INF, 5, INF},{4,   0,   2, INF, INF, 6},{INF, 2,   0, 3,   1, INF},{INF, INF, 3, 0,   INF, 7},{5,   INF, 1, INF, 0,   8},{INF, 6, INF, 7,   8,   0}};for (int i = 0; i <=5; ++i) {for (int j = 0; j <= 5; ++j) {G[i][j] = demo_Data[i][j];}}
}int main() {char Demo_need_input = 'n';int x, y, z, need_x, need_y;char End_input;init();//初始化cout << " *============ OSPF 路由协议原型系统设计与实现 =============*" << endl;cout << "是否使用Demo数据(y|n)", cin >> Demo_need_input;if (Demo_need_input == 'n') {cout << "请输入路由节点数:", cin >> n;do {cout << "请输入起始路由节点(0-" << n - 1 << "):", cin >> x;cout << "请输入结束路由节点(0-" << n - 1 << "):", cin >> y;cout << "请输入结束路由节点" << x << "到" << y << "的距离(双向):", cin >> z;G[x][y] = z;G[y][x] = z;cout << "是否继续输入(y|n):", cin >> End_input;} while (End_input == 'y');} else{init_data();n=6;}cout << "\n  距离表为:---------------------------------------------" << endl;for (int i = 0; i < n; i++)//i对行进行循环{cout<<"\t";for (int j = 0; j < n; j++)//j对列进行循环{if (G[i][j] >= INF)printf(" %4s ","*");elseprintf(" %4d ", G[i][j]);}printf("\n");//第一列循环完之后进行换行}cout << "  -----------------------------------------------------" << endl;Floyd();cout << "请输入查询的起始路由(0-" << n - 1 << "):", cin >> need_x;cout << "请输入查询的结束路由(0-" << n - 1 << "):", cin >> need_y;cout << "\n计算结果如下:" << endl;if (G[need_x][need_y] >= INF) {cout << " *该两个网络没有直接或间接连接*" << endl;} else {ptf(need_x, need_y);cout << "\n最短距离为:" << G[need_x][need_y] << endl;//输出点1到点n的最短距离}system("pause");return 0;
}

点个关注吧

 2024 HNUST计算机网络课程设计-(ᕑᗢᓫ∗)˒芒果酱-参考文章

代码可以参考,૮₍ ˃ ⤙ ˂ ₎ა 但同学们要认真编写哦
-------------------------------------------------------------------------
1、网络聊天程序的设计与实现
C++ Socket 多线程 网络聊天室 支持用户端双向交流(2023)-CSDN博客
2、Tracert 与 Ping 程序设计与实现
Tracert 与 Ping 程序设计与实现(2024)-CSDN博客
3、滑动窗口协议仿真
滑动窗口协议仿真(2024)-CSDN博客
4、OSPF 路由协议原型系统设计与实现
OSPF 路由协议原型系统设计与实现-CSDN博客
5、基于 IP 多播的网络会议程序
基于 IP 多播的网络会议程序(2024)-CSDN博客
6、编程模拟 NAT 网络地址转换
编程模拟 NAT 网络地址转换(2024)-CSDN博客
7、网络嗅探器的设计与实现
网络嗅探器的设计与实现(2024)-转载-CSDN博客
8、网络报文分析程序的设计与实现
网络报文分析程序的设计与实现(2024)-CSDN博客
9、简单 Web Server 程序的设计与实现
简单 Web Server 程序的设计与实现 (2024)-CSDN博客
10、路由器查表过程模拟

计算机网络 - 路由器查表过程模拟 C++(2024)-CSDN博客

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/328131.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux操作系统基础 – 管理目录

Linux操作系统基础 – 管理目录 Linux Essentials – Manage Directories By JacksonML 本文简要介绍在Linux系统中如何管理目录的方法及实例&#xff0c;希望对您有所帮助。 1. Linux目录 一个目录&#xff0c;是一个存储文件名及相关信息的单独工作的文件。所有的文件&am…

HAL——定时器

学习目标 掌握定时器I配置方式掌握定时器占空比输出 学习内容 需求 以PA5对应的LED4为例&#xff0c;我们做一个呼吸灯的效果。 我们采用TIMER1进行实现&#xff1a; Timer配置 配置Timer通道输出 配置周期和分频计数 psc为分频系数&#xff0c;这里的值需要写入到寄存器中…

GoLang:gRPC协议的介绍以及详细教程,从Protocol开始

目录 ​编辑 引言 一、安装相关Go语言库和相关工具 1. 安装Go 2. 安装Protocol Buffers Compiler 2.1 Windows 2.1.1 下载 2.1.2 解压 2.1.3 环境变量 2. macOS 3. Linux 4. 验证安装 3. 安装gRPC-Go 4. 安装Protocol Buffers的Go插件 二、定义服务 三、生成Go…

java SSM问卷调查系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM问卷调查管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采…

数据恢复与并发控制例题

例1: (1)重做&#xff08;REDO&#xff09;&#xff1a;T1,T2,T3; 撤销&#xff08;UNDO&#xff09;&#xff1a;T4。 (2)重做&#xff1a;T1,T2&#xff1b; 撤销&#xff1a;T3。 (3)重做&#xff1a;T1; 撤销&#xff1a;T2,T3. (4)重做&#xff1a;T1&#xff1b; 撤销…

SpringMVC通用后台管理系统源码

整体的SSM后台管理框架功能已经初具雏形&#xff0c;前端界面风格采用了结构简单、 性能优良、页面美观大的Layui页面展示框架 数据库支持了SQLserver,只需修改配置文件即可实现数据库之间的转换。 系统工具中加入了定时任务管理和cron生成器&#xff0c;轻松实现系统调度问…

视觉检测不合格品剔除FC(Smart PLC简单状态机编程应用)

视觉系统检测到不合格产品后&#xff0c;往往都需要控制我们的剔除电磁阀吹气剔除不合格产品&#xff0c;三菱PLC里的推荐编程方法&#xff0c;可以参考下面的链接文章&#xff1a; https://rxxw-control.blog.csdn.net/article/details/125027866https://rxxw-control.blog.c…

Mongodb使用指定索引删除数据

回顾Mongodb删除语法 db.collection.deleteMany(<filter>,{writeConcern: <document>,collation: <document>,hint: <document|string>} ) 删除语法中&#xff0c;除了指定过滤器外&#xff0c;还可以指定写入策略&#xff0c;字符序和使用的索引。 …

使用.Net nanoFramework为ESP32进行蓝牙配网

通过前面的介绍&#xff0c;我们已经学会了如何使用 .NET nanoFramework 为 ESP32 设备连接 Wi-Fi 网络。然而&#xff0c;在实际的物联网环境中&#xff0c;我们往往需要使用更便捷的式来满足配网需求。这篇文章将带你了解一些常见的配网方案&#xff0c;并以 ESP32 为例&…

Spring Boot 整合 MinIO自建对象存储服务

GitHub 地址&#xff1a;GitHub - minio/minio: The Object Store for AI Data Infrastructure 另外&#xff0c;MinIO 可以用来作为云原生应用的主要存储服务&#xff0c;因为云原生应用往往需要更高的吞吐量和更低的延迟&#xff0c;而这些都是 MinIO 的优势。安装过程跳过。…

AI看图识熊实战(一)

使用ONNX Runtime封装onnx模型并推理 进行这一步之前&#xff0c;请确保已正确安装配置了Visual Studio 2017 和 C#开发环境。 项目的代码也可以在这里找到&#xff0c;下面的步骤是带着大家从头到尾做一遍。 界面设计 创建Windows窗体应用(.NET Framework)项目&#xff0c…

数字化工厂产品推荐 带OPC UA的分布式IO模块

背景 近年来&#xff0c;为了提升在全球范围内的竞争力&#xff0c;制造企业希望自己工厂的机器之间协同性更强&#xff0c;自动化设备采集到的数据能够发挥更大的价值&#xff0c;越来越多的传统型工业制造企业开始加入数字化工厂建设的行列&#xff0c;实现智能制造。 数字化…