【问题标题】:Two dimensional grid graph implementation二维网格图实现
【发布时间】:2013-01-15 19:07:35
【问题描述】:

我想在 C 中实现二维网格图。是从单个节点开始并在需要时继续添加节点还是一次形成一个节点更好?代码 sn-p 会很棒。

【问题讨论】:

  • 为什么不用二维数组呢? eng.iastate.edu/efmd/cmultarray.html
  • 每个节点存储什么数据?
  • 我同意,您提供的代码 sn-p 告诉我们您的想法会很棒。
  • 这里我必须在节点中存储一些数据作为记录。我正在暗示通过网络传播随机步行者。我将进行轮询,以在特定时间步长中找出步行者密度最小的邻居。

标签: c algorithm grid 2d graph-algorithm


【解决方案1】:

首先,StackOverflow 社区不喜欢为给定问题提供完整的解决方案。最好自己提出一些建议,并表明你已经考虑过这个问题。您的问题陈述并不具体。你知道编译时的顶点数吗?如果是这样,简单的二维数组就足够了:

int connections[100][100];

如果不是,但顶点的数量是恒定的,也许你应该考虑使用动态分配:

int** connections = malloc(sizeof(int*)*numberOfVertices);
for (int i = 0; i < numberOfVertices; i++) {
    connections[i] = malloc(sizeof(int)*numberOfVertices);
}

这两种解决方案当然会引起一些问题。例如,它们的内存非常昂贵(尤其是当图形稀疏时)。这就是为什么你总是可以使用一些专用的结构。

【讨论】:

    【解决方案2】:

    如果您正在考虑边走边添加节点,那么您应该使用邻接表(链表的链表)来表示您的图;特别是因为随手添加意味着您不知道您的图表是否会被解析。但是,如果您已经知道图表的大小,请使用方形数组(n x n,其中 n 是节点数)。

    【讨论】:

    • 这里我知道每个节点只有四个邻居,因为它是二维网格图。我还要求每个节点都应该具有唯一的身份,因为我必须在网络上传播随机游走者。我将进行轮询以找出哪个邻居拥有最少数量的步行者来转发步行者。所以在每个节点都会有一个大小为 4 的数组来保存这些值。所以,请现在提出建议。如果你能提供任何代码sn-p,那将对我有很大的帮助。
    猜你喜欢
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多