2015-01-21 44 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

相關問題