我正在通过递归解决这只老鼠的狼牙棒问题。 迷宫作为块的N * N二进制矩阵给出,其中源块是最左上的块,即maze [0] [0],而目标块是最右下块的块,即maze [N-1] [N-1] 。老鼠从源头开始,必须到达目的地。老鼠只能在两个方向上移动:向前和向下。 在迷宫矩阵中,0表示该块是死胡同,而1表示该块可以在从源到目的地的路径中使用。请注意,这是典型迷宫问题的简单版本。
我自己编写的这段代码,但未显示输出
#include <stdio.h>
//#where a[][] means denoting maze and b[][] means solution matrix and i put all zero in b[][]
int move(int a[3][3], int, int);
int recursion(int a[3][3], int b[3][3], int i, int j);
int main() {
int i, j, n = 3, a[20][20], b[20][20];
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
scan("%d", &a[i][j]);
print("\n");
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
scan("%d", &b[i][j]);
print("\n");
}
int move(int a[3][3], int i, int j);
int recursion(int a[3][3], int b[3][3], int i, int j);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
print("%d", b[i][j]);
print("\n");
}
return 0;
}
int recursion(int a[3][3], int b[3][3], int i, int j) {
if (move(a, i, j) == 1) {
b[i][j] = 1;
if (recursion(a, b, i, j + 1) == 1)
return 1;
if (recursion(a, b, i + 1, j) == 1)
return 1;
b[i][j] = 0;
return -1;
}
return -1;
}
int move(int a[3][3], int i, int j) {
int n = 3;
if (i >= 0 && i < n && j >= 0 && j < n && a[i][j] == 1) {
return 1;
}
return -1;
}
此代码不显示输出,请帮助我它不显示输出的错误在哪里。
我希望结果会是如果我使用迷宫阵列
例如a [] []是迷宫矩阵
110
101
111
在解决方案矩阵中并打印b [] []表示解决方案矩阵 这是我想要的实际解决方案
100
100
111
一切都很好,但是没有显示输出。
在这里,我采用3 x 3矩阵来解决仅输出未显示的问题
答案 0 :(得分:2)
欢迎使用Stack Overflow,欢迎使用C编程。
您的代码有很多错误。跳到我身上的第一件事是台词:
int move(int a[3][3], int i, int j);
int recursion(int a[3][3], int b[3][3], int i, int j);
main()
的 内部(第22和24行)。我想您打算在其中调用move()
和recursion()
,但是您使用的语法是针对函数声明的,而不是针对函数 calling < / em>。
第二,在两个循环中都包含scan()
之后,i
和j
分别为“ 3”;我敢打赌,您想用move()
为“ 0”和i
为“ 0”来调用j
,但这不是它们在输入循环后将具有的值。
第三,谈到scan()
,我的编译器警告scan()
和print()
被隐式定义;从上下文上讲,我打赌您想要scanf()
和printf()
。
第四,如果您直接输入:
110
101
111
000
000
000
那么您甚至都没有从输入循环中脱颖而出。您的输入循环总共执行18个输入,因此您的输入将更像:
1
1
0
1
0
1
1
1
1
0
0
0
0
0
0
0
0
0
(这是在我根据上面的注释将scan()
替换为scanf()
之后的信息。)
第五,您将move()
和recursion()
声明为int[3][3]
类型,但将a
和b
定义为{{1 }};您的输入填充了int[20][20]
和a
(的一部分),但您将无法将b
或a
作为数组参数传递给{{1} }和b
。
我什至没有研究您的功能逻辑。可能还有其他几个问题。
我强烈建议您从小得多和简单得多开始。例如,这是一个更简单的程序,可按原样编译而不会发出警告,并且会立即为您提供有关其运行情况的反馈。逐步添加这些内容,包括相关的输出行,以便您可以确切地了解它们的形成情况。
move()
学习C时祝你好运-前方还有很多事情!