走迷宮的優先法則 |
答題得分者是:wu-eric
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
各位大大,小弟有一問題,需要各位大大解答,懇請大大們不吝指教!
問題一:
===================================
目前的x座標>目的地的x座標時:
目前的方向有4種:上、左、下、右
例:目前x座標>目的地x座標,且目前的方向向上 =>該先往那走?
目前x座標>目的地x座標,且目前的方向向左 =>該先往那走?
目前x座標>目的地x座標,且目前的方向向下 =>該先往那走?
目前x座標>目的地x座標,且目前的方向向右 =>該先往那走?
===================================
問題二:
===================================
目前的x座標<目的地的x座標時:
目前的方向有4種:上、左、下、右
例:目前x座標<目的地x座標,且目前的方向向上 =>該先往那走?
目前x座標<目的地x座標,且目前的方向向左 =>該先往那走?
目前x座標<目的地x座標,且目前的方向向下 =>該先往那走?
目前x座標<目的地x座標,且目前的方向向右 =>該先往那走?
===================================
問題三:
===================================
目前的y座標>目的地的y座標時:
目前的方向有4種:上、左、下、右
例:目前y座標>目的地y座標,且目前的方向向上 =>該先往那走?
目前y座標>目的地y座標,且目前的方向向左 =>該先往那走?
目前y座標>目的地y座標,且目前的方向向下 =>該先往那走?
目前y座標>目的地y座標,且目前的方向向右 =>該先往那走?
===================================
問題四:
===================================
目前的y座標<目的地的y座標時:
目前的方向有4種:上、左、下、右
例:目前y座標<目的地y座標,且目前的方向向上 =>該先往那走?
目前y座標<目的地y座標,且目前的方向向左 =>該先往那走?
目前y座標<目的地y座標,且目前的方向向下 =>該先往那走?
目前y座標<目的地y座標,且目前的方向向右 =>該先往那走?
===================================
|
wu-eric
中階會員 發表:14 回覆:82 積分:64 註冊:2004-03-17 發送簡訊給我 |
首先,我想即然是迷宮,應該有幾樣元素
1.二維陣列
2.障礙物 小弟我的作法應如下,您可以參考看看 定義:
dx=目標x
dy=目標y
nx=現在所在位置x
ny=現在所在位置y 流程:
int Search(int nx,int ny,int dx,int dy) { if(nx==dx && ny==dy) return 1; if( nx > dx ) { if(左方無障礙物) { nx--; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else if(上方無障礙物) { ny--; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else if(下方無障礙物) { ny ; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else if(右方無障礙物) { nx ; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else return -1;//此路不通 } else if( nx < dx ) if(右方無障礙物) { nx ; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else if(上方無障礙物) { ny--; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else if(下方無障礙物) { ny ; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else if(左方無障礙物) { nx--; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else return -1;//此路不通 else if( ny > dy ) if(上方無障礙物) { ny--; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else if(左方無障礙物) { nx--; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else if(右方無障礙物) { nx ; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else if(下方無障礙物) { ny ; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else return -1;//此路不通 else { if(下方無障礙物) { ny ; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else if(左方無障礙物) { nx--; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else if(右方無障礙物) { nx ; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else if(上方無障礙物) { ny--; iRet = Search(nx,ny,dx,dy); if(iRet == 1 || iRet == -1) return iRet; iRet = 0; } else return -1;//此路不通 } }小弟認為與目前的方向應無關 發表人 - taishyang 於 2005/03/21 19:55:41 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |