0

嘿,我写这个(fortran)的目的是找到一堆点的最小生成树(它们的syscount)。我知道这种方法有效,因为我今天早些时候用 javascript 编写了它。虽然 js 很慢,但我想看看 fortran 会快多少!!唯一的问题是它不起作用,我遇到了一个烦人的错误;

prims.f95:72.43:

if((check == 1) .and. (path(nodesin(j))(k) < minpath)) 然后

                                 1

错误:在 (1) 处的表达式中应有右括号

这到底是怎么回事?!该行的第 43 个字符是“路径”的“h”

nodesin(1) = 1

do i = 1,syscount-1
    pathstart = -1
    pathend = -1
    minpath = 2000

    do j = 1,i
        do k = 1, syscount

            check = 1
            do l = 1, i
                if(nodesin(l) == k) then
                    check = 0
                end if
            end do

            if((check == 1) .and. (path(nodesin(j))(k) < minpath)) then
                minpath = path(nodesin(j))(k)
                pathstart = nodesin(j)
                pathend = k
            end if

        end do
    end do

    nodesin(i+1) = pathend
    minpaths(i)(1) = pathstart
    minpaths(i)(2) = pathend

end do

另外,我对fortran还很陌生,所以我还有其他一些问题;

我可以用 && 代替 .and 吗??

是否有许多其他语言版本的 for(object in list){} 循环?

是否有 php 函数 in_array 的版本?即 bool in_array(needle,haystack),如果有,是否有比以下更好的方法:

check = false
Asize = size(array)
do i = 1, Asize
    if(array(i) == needle) then
        check = true
    end if
end do

然后使用检查变量来查看它是否存在?

(我之前没有在stackoverflow上发布过任何东西。如果我违反了很多礼仪,请不要生气!)

4

2 回答 2

3

看起来您已将path和定义minpaths为二维数组。与类 C 语言相比,在 Fortran 中访问多维数组的方式不同。在 Fortran 中,您在一组括号内用逗号分隔索引。

我猜测通过使用这些变量它们是整数数组。以下是您访问这些数组元素的方式(因为您没有共享变量声明,所以我正在制作这些数组的形状):

integer :: path(n1, n2)
integer :: minpaths(n3, 2)

你的 if 语句应该是:

if((check == 1) .and. (path(nodesin(j), k) < minpath)) then

您对 minpaths 的访问应该是:

minpaths(i, 1) = pathstart
minpaths(i, 2) = pathend

另外,如果您不使用IMPLICIT NONE我建议您考虑一下。不使用它是危险的,并且您正在使用彼此接近的变量名(minpathminpaths)。您可以使用IMPLICIT NONE.

于 2010-08-27T15:34:43.617 回答
1

而.EQ。可以用==代替,还是只有.AND。

为了让您的代码块检查“变量是否存在”,您可以使用“where”并拥有更短的代码!

在 Fortran >= 90 语句和函数可以对数组进行操作,因此不必频繁使用显式循环。

没有 for (object in list),但是使用 where 语句可以做一些非常相似的事情。

许多作用于数组的内在函数也将掩码作为可选参数来选择性地操作。

我建议阅读一本书来了解这些功能。我喜欢 Metcalf、Reid 和 Cohen 的作品。同时,维基百科的第二篇文章可能会有所帮助:http ://en.wikipedia.org/wiki/Fortran_95_language_features

于 2010-08-27T15:36:21.803 回答