2013-12-22 87 views
0

這個問題我想解決在C: http://i.stack.imgur.com/X70nX.png隨機漫步10x10?

我寫了這段代碼,但我不知道什麼是錯的。它不給我任何輸出,只是一個空屏幕! 1

這是我的代碼:

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 
#include <stdbool.h> 
#define ROW 10 
#define COL 10 

#define RIGHT 0 
#define UP 1 
#define LEFT 2 
#define DOWN 3 

int main(void) 
{ 
    char mat[ROW][COL]; 
    bool try; 
    int move, co, ro,letter; 

//Filling the grid with "." 
    for (ro = 0; ro < ROW; ro++) 
    { 
     for (co = 0; co < COL; co++) 
      mat[ro][co] = '.'; 
    } 

//Initial Values 
    co = 0; ro = 0; mat[0][0] = 'A'; 


    srand((unsigned)time(NULL)); 

    for (letter = 1; letter < 26; letter++) 
    { 
     try = true; 

     while (try) 
     { 
      move = rand() % 4; 

      if ((move == RIGHT) && (co + 1 < COL) && (mat[ro][co+1]=='.')) 
      { 
       mat[ro][co + 1] = mat[ro][co] + 1; 
       co++; try=false; 
      } 

      if ((move == UP) && (ro - 1 >= 0) && (mat[ro-1][co]=='.')) 
      { 
       mat[ro - 1][co] = mat[ro][co] + 1; 
       ro--; try = false; 
      } 

      if ((move == LEFT) && (co - 1 >= 0) && (mat[ro][co-1]=='.')) 
      { 
       mat[ro][co - 1] = mat[ro][co] + 1; 
       co--; try = false; 
      } 

      if ((move == DOWN) && (ro + 1 < ROW) && (mat[ro+1][co]=='.')) 
      { 
       mat[ro + 1][co] = mat[ro][co] + 1; 
       ro++; 
      } 
     } 
    } 


//Printing The GRID 
    for (ro = 0; ro < ROW; ro++) 
    { 
     for (co = 0; co < COL; co++) 
      printf(" %c", mat[ro][co]); 
     printf("\n"); 
    } 

    return 0; 
} 

現在有大約同樣的問題在這裏類似的討論:Random walk on 10x10 Array

,但我仍然不知道什麼是我的代碼的問題! ...請把我當成初學者吧。

修訂: 這是考慮各種意見,考慮後的新一個:

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 
#include <stdbool.h> 
#define ROW 10 
#define COL 10 

#define RIGHT 0 
#define UP 1 
#define LEFT 2 
#define DOWN 3 

int main(void) 
{ 
    char mat[ROW][COL]; 
    bool try; 
    int move, co, ro,letter,blocked; 

//Filling the grid with "." 
    for (ro = 0; ro < ROW; ro++) 
    { 
     for (co = 0; co < COL; co++) 
      mat[ro][co] = '.'; 
    } 

//Initial Values 
    co = 0; ro = 0; mat[0][0] = 'A'; 


    srand((unsigned)time(NULL)); 

    for (letter = 1; letter < 26; letter++) 
    { 
     try = true; 
     blocked = 0; 
     while (try) 
     { 
      move = rand() % 4; 
      switch (move) 
      { 

      case RIGHT: 
      { if ((co + 1 < COL) && (mat[ro][co + 1] == '.')) 
      { 
       mat[ro][co + 1] = mat[ro][co] + 1; 
       co++; try = false; break; 
      } 
      else { blocked++; break; }} 

      case UP: 
      { if ((move == UP) && (ro - 1 >= 0) && (mat[ro - 1][co] == '.')) 
      { 
       mat[ro - 1][co] = mat[ro][co] + 1; 
       ro--; try = false; break; 
      } 
      else { blocked++; break; }} 

      case LEFT: 
      { if ((move == LEFT) && (co - 1 >= 0) && (mat[ro][co - 1] == '.')) 
      { 
       mat[ro][co - 1] = mat[ro][co] + 1; 
       co--; try = false; break; 
      } 
      else { blocked++; break; }} 

      case DOWN: 
      {if ((move == DOWN) && (ro + 1 < ROW) && (mat[ro + 1][co] == '.')) 
      { 
       mat[ro + 1][co] = mat[ro][co] + 1; 
       ro++; try = false; break; 
      } 
      else { blocked++; break; }} 
      } 
      if (blocked == 4) 
      {try = false; letter=26;} 
     } 

    } 


//Printing The GRID 
    for (ro = 0; ro < ROW; ro++) 
    { 
     for (co = 0; co < COL; co++) 
      printf(" %c", mat[ro][co]); 
     printf("\n"); 
    } 

    return 0; 
} 

工作代碼只是偶爾,但它「Z」之後不會停止(它應該是字母= 26) ,

+0

我不知道c(我知道Java),但是你不必在最後關閉大括號嗎? 'for'括號和'int main'括號? – 2013-12-22 15:31:50

+1

他們被關閉。 –

+0

有一個錯誤是,代碼沒有設置'嘗試= false'在步驟關閉後。因此,它永遠不會認爲它已經下臺,並且在此之後總是會採取額外措施。這不是你問題的原因 - 走進一個角落是 - 但額外的步驟幾乎肯定會使問題變得更糟。 [本來是作爲答案給出的,但因爲它不是一個好答案而搬到這裏] –

回答

6

該代碼工程有時。我認爲你經常陷入無限循環,因爲你產生了一個不可能繼續的隨機遊走。像這樣:

A B C . 
H I D . 
G F E . 
. . . . 
+0

你能檢查一下我上面修改的代碼嗎... – AE1