使用C的网状网络

时间:2015-11-11 21:42:02

标签: c

我正在尝试使用C语言创建大小为3 * 3的网状网络以进行模拟(使用CSIM)。

X --- X --- X
|     |     |
X --- X --- X
|     |     |
X --- X --- X

以下重叠循环应该模拟节点之间的链接,但是并不真正模拟网格拓扑,因为它也计算对角线链接。我为这个问题道歉,但我真的不知道如何修改它来代表一个网状网络。任何提示都表示赞赏。

int net[5][5];
    for(i=0; i<5;i++)
    {
        for(j=0; j<5;j++)
        {
            net[i][j] = link;
        }
    }

1 个答案:

答案 0 :(得分:0)

由于你在谈论5x5矩阵并且抱怨填充了对角线,我假设你想要一个矩阵,其中条目是节点(你有“X”),链接(你有“ - ” - “或”|“),或者你什么都没有的地方。我不确定是否使用5x5阵列作为3x3网格是一个好主意,但如果你真的想要,你可以做类似以下的事情:

首先创建一个包含3个元素的枚举类型,如下所示:

typedef enum {NODE,LINK,EMPTY} slot;

然后将net声明为类型slot的5x5数组,并根据节点和链接或链接和容器是否交替填充2个嵌套循环。以下代码说明了它的工作原理:

#include <stdio.h>

typedef enum {NODE,LINK,EMPTY} slot;

int main(void){
    int i,j;
    slot net[5][5];

    for(i = 0; i < 5; i+=2){
       for(j = 0; j < 5; j++){
            net[i][j] = j%2 == 0? NODE : LINK;
       }
    }


    for(i = 1; i < 5; i+=2){
       for(j = 0; j < 5; j++){
           net[i][j] = j%2 == 0? LINK : EMPTY;
       }
    }

    printf("\n");
    for(i = 0; i < 5; i++){
       for(j = 0; j < 5; j++){
           switch(net[i][j]){
              case NODE:
                  printf("X");
                  break;
              case LINK:
                  printf("+");
                  break;
              default:
                  printf(" ");
                  break;
           }
       }
       printf("\n");
    }
    return 0;
}

输出:

X+X+X
+ + +
X+X+X
+ + +
X+X+X