2016-11-30 82 views
0

這是一個類的方法,用於查找以三維陣列表示的三維迷宮的出口。數組本身包含長度爲6或1或0的字符串。字符串中的'1'表示您可以朝該方向移動。例如,如果當前數組元素的字符串是100001,這意味着您可以向北移動,也可以向下移動一個級別。位串對應於東南向西南向上的向下。此方法目前尚未完成,因此我知道它尚未找到可行的解決方案,但最終的switch語句在運行時會導致數組超出界限錯誤。我將三維數組描述爲一個三維立方體,其中outtermost數組代表垂直軸,中間數組代表z軸進出頁面,最裏面的數組代表水平x軸。當在迷宮中的當前單元格中時,您會查看字符串中的每一位。對於每一個可能的舉動,你把這個舉動加到q上。一旦完成查看字符串,就會按照首先添加到隊列中的方向移動並重復。任何幫助是極大的讚賞。什麼導致數組越界運行時錯誤?

void maze::solve(int startlevel, int startrow, int startcol, int endlevel, int endrow, int endcol) 
{ 
position current, exit; 
current.level = startlevel; 
current.row = startrow; 
current.col = startcol; 

exit.level = endlevel; 
exit.row = endrow; 
exit.col = endcol; 

q.push('0'); 
while (!q.empty()) 
{ 
    if (current == exit) 
    { 
     cout << "exit found" << endl; 
     return; 
    } 

    if (mazeGraph[current.level][current.row][current.col].at(0) == '1') 
     q.push('n'); 
    if (mazeGraph[current.level][current.row][current.col].at(1) == '1') 
     q.push('e'); 
    if (mazeGraph[current.level][current.row][current.col].at(2) == '1') 
     q.push('s'); 
    if (mazeGraph[current.level][current.row][current.col].at(3) == '1') 
     q.push('w'); 
    if (mazeGraph[current.level][current.row][current.col].at(4) == '1') 
     q.push('u'); 
    if (mazeGraph[current.level][current.row][current.col].at(5) == '1') 
     q.push('d'); 

    if (q.front() == '0') 
     q.pop(); 

    switch (q.front()) 
    { 
    case 'n': 
     current.row -= 1; 
    case 'e': 
     current.col += 1; 
    case 's': 
     current.row += 1; 
    case 'w': 
     current.col -= 1; 
    case 'u': 
     current.level += 1; 
    case 'd': 
     current.level -= 1; 

    } 

} 
return; 
} 

回答

1

要調試,訪問mazeGraph[current.level][current.row][current.col]之前,你應該檢查一下current.levelminLevelmaxLevel同樣用current.rowcurrent.col之間都在mazeGraph的範圍。如果他們不打印與current.level消息,你會知道爲什麼它拋出該錯誤。

我也假設你mazeGraph被初始化爲具有滿意

PS開始和結束水平等界限:對於在矩陣的兩個節點之間的更好的尋路,A *(A星)算法被發現在許多情況下是更好的解決方案。

+0

我試圖這樣做使用 「如果(current.level <0 || current.level> = this.numlevels) \t \t { \t \t \t COUT << 「出界」 << ENDL ; \t \t}「 但編譯器說」this「需要類類型 – Flower