⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 路由算法2.cpp

📁 1、发现它的邻居节点
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#include <iostream.h>

#define INFINITY 1000                 /*最大距离*/
#define MAXNODES 100                  /*最大节点数*/

 struct state
     {
            int predecessor;  /*前驱节点*/
            int length;       /*到起始点的距离*/
            int label;
     }state[MAXNODES];

void main()
{
    int path[MAXNODES];
    int dist[MAXNODES][MAXNODES];
    int n;
    int i,j,k,m,s,t,min,z;
    int a[MAXNODES];
    char c;
    struct state * p;
    printf("输入路由器的个数 :");
    scanf("%d",&n);
    printf("\n"); 
    for(i=0;i<n;i++)
        {
           for(j=0;j<n;j++)
             {
             if(i!=j)
             dist[i][j]=100;
             if(i==j)
             dist[i][j]=0;
             }
        }
    for(i=0;i<n;i++)
        {
            printf("输入与路由器%d的相邻路由器数:",i);
            scanf("%d",&k);
            fflush(stdin);
            printf("请分别输入路由器名称(以空格间隔,以回车结尾)\n");
              j=0;
              c=getchar();
              while(c!='\n')
                {
                     if(j%2==0)
                     a[j]=(int)(c-'0');
                     if(j%2==1)
                     a[j]=c;
					 j++;
					 c=getchar();
                }
                

               for(m=0;m<k;m++)
                {
                   if(dist[a[2*m]][i]>15)
                   dist[i][a[2*m]]=dist[a[2*m]][i]=(rand()%10+2);
                   else
                   dist[i][a[2*m]]=dist[a[2*m]][i];

                }
                printf("\n");
                printf("与路由器%d相邻的路由器距离为:\n",i);
                for(m=0;m<k;m++)
                  {
                     printf("与路由器%d的距离为:%2d\n",a[2*m],dist[i][a[2*m]]);
                  }
                printf("\n");
                
        }    
               printf("结束初始化!\n");
               printf("\n");      
               z=1;
      while(z==1){
		       printf("请选择发送站点:");
               scanf("%d",&s);
               printf("请选择接受站点:");
               scanf("%d",&t);
			   for(p=&state[0]; p<&state[n]; p++)
     {
          p->predecessor = 1;
          p->length = INFINITY;
          p->label =2;
     }
     state[t].length = 0;
     state[t].label = 1;

     k = t;        /*k是当前工作站点*/
     do
     {
         for(i=0; i<n; i++)
         {
              if(dist[k][i]!=0 && state[i].label==2)
              {
                   if(state[k].length+dist[k][i]<state[i].length)
                   {
                        state[i].length = state[k].length+dist[k][i];
                        state[i].predecessor = k;
                   }
              }
         }

         k=0;
         min=INFINITY;
         for(i=0; i<n; i++)
         {
             if(state[i].label==2&& state[i].length<min)
             {
                 k=i;
                 min=state[i].length;
             }
         }
         state[k].label =1;
     }while(k!=s);
     
     i=0;
     k=s;
     do
     {
         path[i++] = k;
         k = state[k].predecessor;
     }while(k!=t);
     printf("ok2\n");
     for(j=0;j<i;j++)
     {
       printf("%d->",path[j]);
     }  
      printf("\n1.继续     2.退出\n");
      scanf("%d",&z);     
      }
        }
    
    









⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -