線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:953
推到 Plurk!
推到 Facebook!

走迷宮的優先法則

答題得分者是:wu-eric
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-21 15:28:45 IP:61.221.xxx.xxx 未訂閱
各位大大,小弟有一問題,需要各位大大解答,懇請大大們不吝指教! 問題一: =================================== 目前的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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-21 19:44:14 IP:210.66.xxx.xxx 未訂閱
首先,我想即然是迷宮,應該有幾樣元素 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
系統時間:2024-05-19 15:11:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!