我已經被分配給一個'迷宮'程序,它將允許用戶通過從頭到尾的導航來玩和解決隨機迷宮。到目前爲止,我已經開發出了一個可以在預定義的迷宮中運行的工作原型,但是該機構要求我儘可能地使它變得隨機。爲此,我添加了一個函數'findpath'來檢查和驗證隨機迷宮是否可以解決,或者叫做'mazebuilder'來創建另一個隨機迷宮。整個代碼在這裏:http://codepad.org/wb1OGGrZ。 現在執行時,此功能會顯示非法的控制流。奇怪的控制順序
int findpath(int x, int y)
{
if(fpmap[x][y]==END) //1
{
return TRUE;
}
if(fpmap[x][y]!=PATH||fpmap[x][y]!=START) //2
{
return FALSE; //2a
}
min_moves++; //3
fpmoves++;
fpmap[x][y]=SOLUTION;
if(findpath(x,y-1)) //4
{
return TRUE;
}
if(findpath(x+1,y))
{
return TRUE;
}
if(findpath(x,y+1))
{
return TRUE;
}
if(findpath(x-1,y))
{
return TRUE;
}
min_moves--; //5
fpmap[x][y]=PATH;
return FALSE; //6
}
我試圖跟蹤程序,這是該函數在它叫什麼: 1.檢查是否#1。 2.檢查#2。 3.跳到#6。 那麼,如果在#4或#5之後,爲什麼程序沒有進入#2a或#3? 它似乎跳過整個代碼並衝向#6。這是否存在邏輯錯誤還是這種語法? 請幫我解決這個問題。 PS:此代碼是爲TurboC編譯器編寫的,因爲我的系統要求我這樣做。請多多包涵:(
在findpath所使用的算法更多信息:http://www.cs.bu.edu/teaching/alg/maze
尋求調試幫助的問題(「爲什麼不是這個代碼工作?」)必須包括所需的行爲,**特定的**問題或錯誤以及在問題本身中重現它**所需的最短代碼** 。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建[mcve]示例。 – Olaf
「...該機構需要我......」,抱歉,但我笑得這麼多,聽起來像是一個陰謀,這個祕密機構試圖把我們都陷入一個巨大的迷宮中,不必要的if語句 – user463035818
這段代碼if (fpmap [x] [y]!= PATH || fpmap [x] [y]!= START)''應該用'&&'代替'||'。 –