二维阵列迷宫在C中解决

时间:2016-08-29 07:16:03

标签: c recursion maze

我有一个迷宫,表示为整数的正方形数组。我必须通过迷宫找到成本最低的路径(整数之和),正交移动。

Sub test()
    Dim i
    Dim n

    n = InputBox("type n")

    For i = 1 To n
        If i = 1 Then ThisWorkbook.Sheets(i).Select
        If i > 1 Then ThisWorkbook.Sheets(i).Select Replace:=False
    Next i
End Sub

例如,通过上面迷宫的曲目将全部为1:

12323
12323
11232
21111

我写了一个递归函数来查找路径,但它总是返回0而不是步数。

我设置断点并发现下面的行总是执行(比较是 true ),即使数组位置与 num 匹配。

X2323
X2323
XX232
2XXXX

我认为if(*((int*)table)!=num) return 0;

有些问题

代码:

int**

1 个答案:

答案 0 :(得分:0)

看看你眼前的问题:

if(*((int*)table)!=num)
    return 0;

是一个二维int数组。您将其转换为1-D int数组。然后你取消引用它,好像它实际上一维数组。这为您提供了表[0]的地址,即第一行。您现在将其与参数 num 进行比较。

我不确定 num 是什么,因为您还没有记录您的程序或以其他方式解释界面。但是,您的英语用法表明 num 是一个小的正整数。这意味着在数值上等于内存地址。 "不等于"比较永远是真实的。

我无法为您解决此问题,因为我不清楚您的计划应该如何运作。我强烈建议您在解决相关问题之前先学习编程的构建块。

除此之外,学习如何自然地使用基本数据类型,而不是将它们转换为其他类型 - 正如一位评论者已经提到的那样,类型转换通常意味着您的设计中存在固有错误。例如,看看这个比较:

(int)(table-Finish)==0

用语言来说,你想用这句话做些什么?从语义上讲,这只是比较一对二维数组的起始地址。你可以用简单的

table == Finish

出于某种原因,您发现有必要减去地址,将差值转换为整数(它已经是整数类型),然后比较转换后的差异您使用三个操作而不是直接操作。

另外,学习增量编程:写几行,调试它们,然后继续,直到你确定它们有效。上面的代码有很多问题,难以阅读和难以调试。最特别的是,当您尚未调试引用单个阵列位置的能力时,您不应该编写大部分代码。另一位评论者还指出,您似乎覆盖了数组大小 - 如果您无法正确获取输入,该程序的其余部分应该如何工作?