我正在用C语言编写一个计算机编程课,我正在尝试实现一个用于Knight巡回演出问题的算法。我意识到C没有布尔值,除非你自己设计它们或者把'0'和'1'设为真和假并与它们保持一致。我决定使用后者,并编译但是说“Process返回26866464< 0x28FE00>”我从互联网上提供的伪代码编写了这个程序,我理解了Knight's Tour和这段代码的想法,但我无法确切地指出究竟是什么错误。我觉得我打印它的方式有点不对劲。
#include <stdio.h>
#include <stdbool.h>
#define N 5
bool algorithmMove(int x, int y, int m)
{
bool visited[N][N];
visited[N][N] == false;
if (x < 0 || x >= N || y < 0 || y >= N)
{
return false;
}
if (visited[x][y] == true)
{
return false;
}
if (m = (N*N) - 1)
{
printf("A solution has been found");
printf("x, y");
visited[x][y] == true;
return true;
}
else
{
bool result;
result = false;
result = result || algorithmMove(x+2, y+1, m+1);
result = result || algorithmMove(x+2, y-1, m+1);
result = result || algorithmMove(x-2, y+1, m+1);
result = result || algorithmMove(x-2, y-1, m+1);
result = result || algorithmMove(x+1, y+2, m+1);
result = result || algorithmMove(x+1, y-2, m+1);
result = result || algorithmMove(x-1, y+2, m+1);
result = result || algorithmMove(x-1, y-2, m+1);
if (result = true)
{
printf("x, y");
return true;
}
else
{
visited[x][y] == false;
return false;
}
}
}
main()
{
algorithmMove(2, 4, 0);
}
答案 0 :(得分:0)
visited[N][N] == false;
这不是赋值运算符,它是一个比较运算符(==),你需要像
那样解决这个问题visited[N-1][N-1] = false; /* Array access should be within bound */
同样的修复需要在多个地方完成。
在不初始化数组元素的情况下,您可以将它们用于比较,如
visited[x][y] == true
使用未初始化的变量将导致未定义的行为