rip协议实现
实验要求
²1、实现RIP协议更新路由信息过程,版本 不限
²2、根据给定数据文件,输出路由初始状 态,更新路由信息并输出,直至收敛, 输出收敛状态
示例:
数据文件内容:
0, 1,-1,-1,-1,
1, 0, 1, 1,-1,
-1, 1, 0, 1, 1,
-1, 1, 1, 0,-1,
-1,-1, 1,-1, 0,
上述数据为如下拓扑结构的邻接矩阵,
其中0
表示自身,1表示直接相连,-1表示非直接相连
示例结果:
实验代码:
#include<stdio.h> #include<stdlib.h> void main() { FILE *fp; int i_array[8][8];//初始 int r_count=1;//第r_count 轮输出 int array[8][8]; int l_array[8][8];//上一个状态 int line,row,i,j,min; void print(int array[8][8]); array[0][0]=' '; fp=fopen("d://in.txt","r");//打开文件 for( i=1;i<=7;i++) fscanf(fp,"%d",&array[0][i]);//上面的 abcdefg for( i=1;i<=7;i++) fscanf(fp,"%d",&array[i][0]);//左面面的 abcdefg for( i=1;i<=7;i++) for(int j=1;j<=7;j++) fscanf(fp,"%d",&array[i][j]);//矩阵中间的数据 for(i=0;i<8;i++) for(j=0;j<8;j++) i_array[i][j]=array[i][j];//赋值给初始矩阵(保存相邻的路由器) printf("i_array:\n");//打印赋值给初始矩阵 print(i_array); int fla=0;//判断结束标志 while(fla==0) { fla=1; for(i=0;i<8;i++) for(j=0;j<8;j++) l_array[i][j]=array[i][j];//保存上次结果。 for(line=1;line<7;line++)//遍历整个数组 { for(row=line+1;row<8;row++) { if(array[line][row]==-1) { min=100; for(i=1;i<8;i++) if(i_array[i][row]==1 &&l_array[line][i]!=-1&&l_array[line][i]!=0)//相邻 且不是同一个路由 且还未建立连接 if(min>array[line][i]+array[i][row])//存在更小的值可以赋值给min { min=l_array[line][i]+l_array[i][row]; } if(min!=0&&min!=100) { array[line][row]=min; array[row][line]=array[line][row]; } } } } printf("round %d transform:\n",r_count); print(array); for(i=0;i<=7;i++)//判断是否需要推出路由器的更新。 for(j=0;j<=7;j++) if(l_array[i][j]!=array[i][j]) fla=0; r_count++; } printf("Final State:\n"); print(array); } void print(int array[8][8]) { int i,j; for(i=0;i<8;i++) { for(j=0;j<8;j++) { if(i==0||j==0) printf(" %2c ",array[i][j]); else printf(" %2d ",array[i][j]); } printf("\n"); } }