距离向量算法模拟程序界面优化
优化后的距离向量算法模拟程序c#include <stdio.h>#include <stdlib.h>#include <string.h>
// 定义路由表结构RTabletypedef struct node { char dstNet[5]; int distance; char nextSkip[5];} RTable;
RTable RT1[1000]; // 当前路由器路由表RTable RT2[1000]; // 相邻路由器的路由表
int i, l1, l2;char nearR1[5], nearR2[5];
// 基于当前路由器的路由表初始化函数void InitRTable(RTable *RT) { printf('请为当前路由器添加路由表项(目的网络 距离 下一跳路由器),输入'0 0 0' 结束添加: '); for (i = 0; i < 1000; ++i) { scanf('%s%d%s', RT[i].dstNet, &RT[i].distance, RT[i].nextSkip);
if (RT[i].distance == 0) { break; } } l1 = i; // 记录RT1[]的长度}
// 相邻路由器添加函数void AddNearRouter() { printf(' 请输入相邻路由器名称: '); scanf('%s', nearR1);}
// 基于相邻路由器的路由表初始化函数void InitNearRTable() { printf(' 请为相邻路由器%s添加路由表项(目的网络 距离 下一跳路由器),输入'0 0 0' 结束添加: ', nearR1); for (i = 0; i < 1000; ++i) { scanf('%s%d%s', RT2[i].dstNet, &RT2[i].distance, RT2[i].nextSkip);
if (RT2[i].distance == 0) { break; } } l2 = i; // 记录RT2[]的长度}
// 路由信息修改函数void UpdateNearRTable(RTable *RT2, char *nearR) { int p; for (p = 0; p < l2; ++p) { RT2[p].distance = RT2[p].distance + 1; strcpy(RT2[p].nextSkip, nearR); }}
// 路由表更新函数void UpdateRTable(RTable *RT1, RTable *RT2) { int p, q; // p——RT2[],q——RT1[] int updatedCount = 0; // 记录更新的路由表项数量 for (p = 0; p < l2; ++p) { int finded = 0; for (q = 0; q < l1; ++q) { if (strcmp(RT2[p].dstNet, RT1[q].dstNet) == 0) { // 当前表中找到与发来的表目的网络相同的一条路由信息 finded = 1; if (strcmp(RT1[q].nextSkip, RT2[q].nextSkip) == 0) { // 下一跳路由器正好是这个相邻路由器 RT1[q].distance = RT2[p].distance; } else { // 下一跳路由器不是这个 if (RT2[p].distance + 1 < RT1[q].distance) { RT1[q].distance = RT2[p].distance; strcpy(RT1[q].nextSkip, RT2[q].nextSkip); updatedCount++; } } } } if (!finded) { // 当前表中没有这条路由信息,就加上 strcpy(RT1[l1].dstNet, RT2[p].dstNet); RT1[l1].distance = RT2[p].distance; strcpy(RT1[l1].nextSkip, RT2[p].nextSkip); ++l1; updatedCount++; } } printf(' 更新了 %d 条路由信息。 ', updatedCount);}
// 打印当前路由表void Print1() { printf(' ----------当前路由器的路由表--------- ');}
// 打印相邻路由表void Print2() { printf(' ----------相邻路由器的路由表--------- ');}
// 路由表打印函数void PrintRTable(RTable *RT, int len) { printf(' 目的网络 距离 下一跳路由器 '); printf('------------------------------------- '); for (i = 0; i < len; ++i) { printf(' %s %d %s ', RT[i].dstNet, RT[i].distance, RT[i].nextSkip); } printf('------------------------------------- ');}
// 路由表更新函数void Print_Update() { UpdateRTable(RT1, RT2); printf(' -------当前路由器更新后的路由表------ '); PrintRTable(RT1, l1);}
int main() { printf(' -----------距离向量算法的过程模拟------------
');
// 初始化当前路由器 InitRTable(RT1);
while (1) { printf('
-----------菜单----------- '); printf('1. 添加相邻路由器并更新路由表 '); printf('0. 退出程序 '); printf('请选择操作:'); int choose; scanf('%d', &choose);
if (choose == 1) { // 添加相邻路由器 AddNearRouter();
// 初始化相邻路由器 InitNearRTable();
// 打印当前路由表 Print1(); PrintRTable(RT1, l1);
// 打印相邻路由表 Print2(); PrintRTable(RT2, l2);
// 打印修改后的路由信息 printf('
-------修改后的路由信息------ '); UpdateNearRTable(RT2, nearR1); PrintRTable(RT2, l2);
// 进行路由表更新 Print_Update(); } else if (choose == 0) { break; } else { printf('
无效选择,请重新输入! '); } }
printf('
-----------程序结束------------
'); return 0
原文地址: https://www.cveoy.top/t/topic/ocGM 著作权归作者所有。请勿转载和采集!