如何在连接组件标记算法i Fortran中存储等价

时间:2012-05-10 09:53:18

标签: algorithm fortran fortran90

我必须实现连接组件标记算法Fortran。我对如何扫描矩阵有一个清晰的想法,但是存储和恢复等价类呢?我想在许多其他编程语言中这是一项简单的任务,但我必须在Fortran中完成。我该怎么办?

首先编辑:在维基百科上关于connected components algorithm的伪代码之后,我不知道如何在Fortran中做什么

linked[label] = union(linked[label], L)

1 个答案:

答案 0 :(得分:3)

以下是答案的一些片段。看起来您需要实现一个表示一组标签的数据结构。您必须做出的第一个决定是决定如何为标签建模。我看到了3种明显的方法:

  1. 使用整数。
  2. 使用长度为1(或2或任何你想要的)的字符变量。
  3. 使用您希望它拥有的任何组件定义类型。
  4. 第二个决定是如何实现一组标签。我看到了3种明显的方法:

    1. 使用标签数组(整数数组,字符数组(len = 2),类型数组(标签),无关紧要),其大小在编译时是固定的。你必须确定你硬线的尺寸总是足够大。这不是一个非常有吸引力的方法;我可能没有提到它。
    2. 使用大小在运行时设置的标签数组。这意味着使用可分配的数组。如果可能的话,你必须弄清楚如何在运行时将其设置为正确的大小。
    3. 实现表示一组标签的类型。例如,此类型可以将集合建模为链接列表。但这不是模型集的唯一方法,类型可能会将标签集建模为数组,并根据需要做一些花哨的步法来重新调整数组的大小。当然,通过定义类型,您可以自由地更改集合的内部表示,而无需修改使用集合类型公开的功能的代码。
    4. 根据您所做的选择,实现联合函数以向现有标签集添加新标签应该非常简单。

      但请注意,还有很多其他方法可以解决这个问题。例如,您可以从一组已定义的组件标签开始,然后从该组中删除您不需要使用的组件标签。

      由于您似乎是Fortran的新手,所以这里列出了您需要熟悉的语言功能以实现上述功能。

      1. 您的编译器实现了多少Fortran 2003标准。
      2. 定义和使用派生类型。
      3. 可分配数组,分配数组,移动分配。
      4. 派生类型的数组。
      5. 类型绑定程序。
      6. 指针和目标。