我要投稿

rip基于距离向量算法的C++代码

时间:2009-11-25 13:09 作者:信雨纷飞 阅读:3602

扫描二维码关注公众号,可以查询淘宝、京东商品优惠券
#include "stdafx.h"
#include <vector>
#include <string>
#include <windows.h>
#include <iostream>
using namespace std;
#define INFINITY 0 
#define MAX_VERTEX_NUM 10
typedef string VertexType;
struct Node {
 string obj_net;
 int    jmp_num;
 string jmp_nxt;
 Node():obj_net(""), jmp_num(16), jmp_nxt("") {}
};
typedef vector<Node> Rout_Node;
Rout_Node rout_node[MAX_VERTEX_NUM];
int list[MAX_VERTEX_NUM] = {0};
typedef struct ArcCell {
  int adj;             //相邻?             
} AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct {
  VertexType vexs[MAX_VERTEX_NUM]; 
  AdjMatrix arcs;                   
  int vexnum, arcnum;                
} MGraph;
int LocateVex(MGraph G,VertexType v) {
  int i;
  for(i = 0; i < G.vexnum; i++)
  if(G.vexs == v)
   return i;
  return -1;
}
int CreateG(MGraph &G) {
  VertexType v1, v2;
  int i, j;
  cout << "网络中路由器个数: " << endl;
  cin >> G.vexnum;
  cout << "\n\n\n\n路由器间链路条数: " << endl;
  cin >> G.arcnum;
  for( i = 0; i < G.vexnum; i++) {
   cout << "\n\n\n\n路由器 " << i + 1 << ": " << endl;
      cin >> G.vexs;  
  }
  for(i = 0; i < G.vexnum; i++)
   for(j = 0; j < G.vexnum; j++){
    G.arcs[j].adj = INFINITY;
   }
   for(int k = 0; k < G.arcnum; ++k) {
    cout << "\n\n\n\n链路" << k + 1 << " 依附的两个路由器: " << endl;
          cin >> v1 >> v2;
    i = LocateVex(G,v1);
    j = LocateVex(G,v2);
    Node node;
    node.jmp_num = 1;
    node.jmp_nxt = "-";
    node.obj_net = v2;
       rout_node.push_back(node);
    node.jmp_num = 1;
    node.jmp_nxt = "-";
    node.obj_net = v1;
       rout_node[j].push_back(node);
    list++, list[j]++;
    G.arcs[j].adj = G.arcs[j].adj = 1;
   }
   return 1;
}
void dispMGraph(MGraph G) {
 cout << "\n\n\n\n路由器的路由表如下:" << endl;
 for(int i = 0; i < G.vexnum; i++) {
  cout << G.vexs << ": " << endl;
  cout << "obj_net\tjmp_num\tnxt_jmp" << endl;
  for(int j = 0; j < list; j++)
   cout << rout_node[j].obj_net << '\t'
        << rout_node[j].jmp_num << '\t'
     << rout_node[j].jmp_nxt << '\n';
  cout << "\n\n\n\n\n" << endl;
  Sleep(2000);
 }
 cout << endl;
}
void shareInfo(MGraph& G) {
 dispMGraph(G);
 int count = 0;
 while(1) {
 for(int i = 0; i < G.vexnum; i++)
 {   
  for(int j = 0; j < G.vexnum; j++)
  {
   if(G.arcs[j].adj) {
    for(int k = 0; k < list; k++)
    {
     bool flag = false;
     for(int m = 0; m < list[j]; m++)
     {     
      if(rout_node[j][m].obj_net.compare(rout_node[k].obj_net) == 0)
      {
       flag = true;
       if(rout_node[j][m].jmp_nxt.compare(G.vexs) == 0)
        
       {        
        rout_node[j][m].jmp_num = rout_node[k].jmp_num + 1;
       }
       else if(rout_node[j][m].jmp_num > rout_node[k].jmp_num + 1)
       {
        rout_node[j][m].jmp_num = rout_node[k].jmp_num + 1;
        rout_node[j][m].jmp_nxt = G.vexs;
       }
      }
     }
     if(!flag)
     {
      Node node;
      if(rout_node[k].obj_net.compare(G.vexs[j]) != 0) {
      node.obj_net = rout_node[k].obj_net;
      node.jmp_num = rout_node[k].jmp_num + 1;
      node.jmp_nxt = G.vexs;
      rout_node[j].push_back(node);
      list[j]++;
      }
     }
    }
   }
   
  } 
  
  dispMGraph(G);
 
 }
// dispMGraph(G);
 count++;
 if(count == 5)
  break;
 }
 
}
void main() {
 MGraph   G;
    CreateG(G);   
 shareInfo(G);
}

已经是第一篇下一篇:掷骰子游戏

最新评论

信雨纷飞2009-11-25 13:10

实验课的。
我要投稿 我要评论
插入url链接 添加表情
限 100000 字节
响应相关主管单位规定,关闭回帖发帖功能
[VB毕业设计] [ASP毕业设计] [JAVA毕业设计] [JSP毕业设计] [PHP毕业设计] [asp.net毕业设计] [.net毕业设计] [网络毕业设计] [Delphi毕业设计] [VC毕业设计] [VF毕业设计] [机械毕业设计] [工艺毕业设计] [模具毕业设计] [其他毕业设计]
站长联系 cccbbsnet#163.com 本站系公益性质网站,站内广告维系本站运作。欢迎赞助本站。
大学生计算机相关方向|软件编程|网络工程|web开发|数据库技术|学习资料等
本社区仅供学习计算机相关技术所使用,访客发言不得违反国家法律法规
Time now is:10-20 02:50, Gzip enabled 蜀ICP备07004838号Powered by cccbbs.net v7.5 SP3 Code © 2003-06 cccbbs
计算机毕业设计