2015-01-21 61 views
1

我正在C计算机编程类,我试图实现一个算法用于骑士的旅游问题。我意识到C没有布尔值,除非你自己设计它们,或者把'0'和'1'设为真和假,并且与它们一致。我决定使用后者,并编译它,但它说:“过程返回26866464 < 0x28FE00>”我从互联网上提供的伪代码编写这个程序,我理解骑士的旅游和这个代码的想法,但我不能真正指出错误究竟是什么。我觉得印刷它的方式有点不对劲。处理返回26866464 <0x28FE00>错误

#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

没有,对不起,我会确保到编辑,我有一个问题,但意识到了这个问题并修复了它,并且stackoverflow保存了你以前写的东西,我的错误 – DsDude 2015-01-21 08:40:06

+0

你应该声明你的程序入口点为'int main(void)'并且把'return 0;'作为最后一条语句。另外,在C'='中是赋值,并且将左侧的th变量的值设置为右侧的项目的值,而'=='是对相等性的测试。数组也被索引从0到N-1(而不是1到N)。 – 2015-01-21 08:46:54

+0

如果你在'main'函数中删除或注释掉这行(如果以'//开头'或者在''之前放'''*''''''''''''''')会发生什么?该过程是否仍然返回一个非零值? – 2015-01-21 08:58:56

回答

0
visited[N][N] == false; 

这不是一个赋值运算符是一个比较操作符(==),你需要解决这个问题就像

visited[N-1][N-1] = false; /* Array access should be within bound */ 

相同的修订需要在多个地方进行。

没有初始化你使用它们比较喜欢

visited[x][y] == true 

数组元素使用未初始化的变量会导致不确定的行为

+0

噢好吧,我知道了,反过来,谢谢 – DsDude 2015-01-21 08:42:46

相关问题