2012-12-12 80 views
0

我寫了一個程序來生成一個迷宮並解決它,但是它在求解部分有一些缺陷。C++棧迷宮求解程序

它形成了像5 * 5或16 * 16這樣的方形迷宮。

迷宮開始於(0,0在2D陣列,並且在(大小()結束 - 1,尺寸() - 。1)

我用 '1' 以指示結束路徑。 您可以從圖片中看到下面有一些不必要的「1」,儘管該程序可以找到出口。

對不起大家,我真的無法調試這一點。誰能幫助我或者指導我? 非常感謝!

屏幕截圖是這裏。我不允許直接發佈圖片 https://photos-1.dropbox.com/t/0/AADjdwSgmLdVKCZrI1C-gDvwZ9ORj0rGbv3UJ7AYqXWeuA/10/7014161/png/2048x1536/2/1355295600/0/2/bug.png/5sQR3E_jcow4lWIy9cFf2FYbmwl0C_sd2cfCyMPe0MU

我的代碼是在這裏 https://www.dropbox.com/s/vldkcv4fy6bp1ff/Source.cpp

問題SOLOVED 謝謝大家

我原來的解決迷宮代碼爲

`否則,如果(randomNum == 1){

 if (y+1<myMaze.size() && !myMaze[x][y+1].left && !myMaze[x][y+1].visited) 
     { 
      y++; 
      myMaze[x][y].truePath=true; 
      myMaze[x][y].visited=true; 
      s1.push(myMaze[x][y]); 
      randomNum=rand()%4; 
     } 
     else 
     { 
      rightBusted=true; 
      randomNum=rand()%4; 
     }` 

然後,我只是將這些代碼添加到if語句中,以將bool變量重置爲false,然後問題解決了

  downBusted=false; 
      rightBusted=false; 
      topBusted=false; 
      leftBusted=false; 

回答

2

你可以調試這個,man。就是這樣。你已經有了你需要的工具去做;他們所需要的只是一點點調整。

用於調試的最佳工具是displayMaze()例程。你只需要兩個可選參數添加到它把它變成一個強大的調試工具:

void displayMaze(const vector < vector<Cell> >& arr, int curX=-1, int curY=-1) 
{ 
    . 
    . 
    . 

現在,如果呼叫者省略curX & CURY,編譯器在-1默認值填充。現在稍後在該功能中,打印另一個字符以指示「當前迷宮位置」。以下是我做到了,這「似乎工作」但我並不能保證它,因爲我沒有刻意去真正理解你的邏輯:

  if (curX>=0 && curY>=0 && curX==i/2 && curY==j) // ++++++++++++ 
       cout << " * "; // * means "current position" // ++++++++++++ 
      else if (!arr[i/2][j].truePath) 
       cout << " "; 
      else 
       cout << " 1 "; 

現在你有內置程序中的一個強大的調試工具。當main()在沒有兩個額外參數的情況下調用它時,不打印星號。但是當你從solveMaze()調用它時,你可以指定「當前位置」,所以它將用'*'標記該位置。在solveMaze(),添加幾個變量,用於跟蹤「當前位置」的...

int x=0, y=0; 
int curX=x, curY=y; // ++++++++++++++++ 

......然後,在你的循環的頂部,只需打電話給你強大的調試工具,使您得到整體解決方案的當前狀態,因爲它的發展,一步一步:

int i=0; 
while (!exitFound) 
{ 
    displayMaze(myMaze, curX, curY); // +++++++++++++++++ 
    . 
    . 
    . 

現在,只要你改變你認爲什麼是「當前位置」,只需更新curX和CURY因此,和調試工具將保持更新,以便您可以看到解決方案在圖形展開(好,僞圖形)。您甚至可以在關鍵邏輯決策點添加調試cout消息,以便您可以將這些決策點與您所看到的解決方案相關聯,以便查看是否/何時出現問題。如果您發現問題,您可以在輸出中向後滾動以查看問題出在哪裏。

祝你好運!

+0

謝謝!你非常友善和耐心 我終於找到了這個錯誤,感謝你 –