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

關於迷宮的問題

尚未結案
cathyboy
一般會員


發表:1
回覆:5
積分:1
註冊:2005-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-09 00:19:26 IP:220.131.xxx.xxx 未訂閱
要做一個8*8的迷宮,迷宮的座標是要自已輸入的,如果輸入的座標有物就重新輸入,沒有的話就可以走,走到沒有路就顯示無解,有路就顯示走的路徑。有大大會的嗎?可以幫寫一下程式碼嗎?快頭痛死了~~~~= =
ccobj
一般會員


發表:6
回覆:27
積分:21
註冊:2003-12-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-09 11:24:00 IP:218.172.xxx.xxx 未訂閱
路徑的搜尋請參考這一篇 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=65475 至於輸入座標的檢查 可以在input外加一層迴圈 檢查該點沒有障礙就跳出回圈
cathyboy
一般會員


發表:1
回覆:5
積分:1
註冊:2005-04-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-09 12:46:03 IP:218.171.xxx.xxx 未訂閱
嗚嗚~大大你可以說明一下嗎?因為那裡面的語法好像是c,不是c 所以有的我都看不太懂,麻煩你了。
ccobj
一般會員


發表:6
回覆:27
積分:21
註冊:2003-12-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-09 14:38:20 IP:218.172.xxx.xxx 未訂閱
是哪幾行程式不懂
cathyboy
一般會員


發表:1
回覆:5
積分:1
註冊:2005-04-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-10 12:18:37 IP:218.171.xxx.xxx 未訂閱
也不能說是哪幾行不懂,是我想把它改成8*8使用者輸入座標,怎麼改就是有錯,大大你可以幫個忙嗎?= =謝謝
cashyy
高階會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-10 22:51:52 IP:59.104.xxx.xxx 未訂閱
方便把程式po上來嗎?讓其他大大一起幫你!
cathyboy
一般會員


發表:1
回覆:5
積分:1
註冊:2005-04-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-13 22:25:10 IP:61.221.xxx.xxx 未訂閱
這個是我自已寫的,可以請各位大大幫忙改嗎?我要用輸入x,y的座標下去走迷宮,會的大大麻煩幫改一下= = code #include  #include #include using namespace std; char maze [8][8]={{1,0,1,1,1,1,1,1}, {0,0,1,0,1,0,0,1}, {1,0,1,0,1,0,1,1}, {1,0,1,0,0,0,0,1}, {1,0,0,0,1,1,0,1}, {1,0,1,0,0,1,0,1}, {1,0,1,0,1,1,0,1}, {1,1,1,1,1,1,0,1}}; int mani() { fstream file; file.open("maze.txt",ios::in); int i,j,x,y; do{ cout << "請輸入x座標(0-9)" << endl; cin >> x; cout << "請俞入y座標(0-9)" << endl; cin >> y; }while(maze[x][y]=='1' || maze[x][y]=='e'); for (i=0;i<8;i ) { for (j=0;j<8;j ); } cout << "顯示迷宮:" << maze[i][j] << endl; int visit(int i,int j) { m[i][j]=1; /* 在已通過的位置上打記號 */ if (i==1 && j==1) /* 到達出口時 */ success=1; /* 未到達出口前搜尋迷宮路徑 */ if (success!=1 && m[i][j 1]==0) visit(i,j 1); if (success!=1 && m[i 1][j]==0) visit(i 1,j); if (success!=1 && m[i][j-1]==0) visit(i,j-1); if (success!=1 && m[i-1][j]==0) visit(i-1,j); if (success==1) /* 顯示通過點 */ return success; } /code }
wu-eric
中階會員


發表:14
回覆:82
積分:64
註冊:2004-03-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-14 00:31:44 IP:220.229.xxx.xxx 未訂閱
我有一個電腦鼠走迷宮的程式,供你參考參考吧! http://delphi.ktop.com.tw/topic.php?TOPIC_ID=69055
cathyboy
一般會員


發表:1
回覆:5
積分:1
註冊:2005-04-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-04-14 17:46:26 IP:220.140.xxx.xxx 未訂閱
嗚嗚~大大的程式碼完全看不懂,有哪大好心的大大可以幫寫8*8使用者輸入的程式呀!天呀~~~~~
cashyy
高階會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-04-17 01:00:09 IP:59.104.xxx.xxx 未訂閱
#include 
#include     char maze[10][10]; //地圖陣列 
int checkno();
void walk();       
int checkzero();
void print();
int x,y,xprint,yprint;                   //起始點
void main()
{
  FILE *fp;
  int i,j,kill,chkzero;
  fp = fopen("maze.txt","r");
  for(i=0;i<10;i  )
    for(j=0;j<=10;j  )
          maze[i][j]=fgetc(fp);
  fclose(fp);      while(1)         //讀入起始點
  {
    printf("Please enter the start point:(");
        x=getche();    //取得x座標
        printf(",");
        y=getche();     //取得y座標
        printf(")\n");
    x-=48;
        y-=48;
        xprint=x;      //記錄起始點x座標,用於輸出路徑
        yprint=y;
    //判斷是否輸入在1或是終點上
        if(maze[x][y]=='1' || maze[x][y]=='e')
          continue;
        else if(x>10 || y>10)  //判斷是否超出迷宮
          continue;
        else
          break;
  }
  while(1)                      //走迷宮
        {
          kill = checkno();            //檢查死路的數目
      if(maze[x-1][y]!='1' && x-1>=0)
          {
                if(maze[x-1][y]=='e')     //判斷是否為終點
                {
                  print();
                  break;
                }
                chkzero=checkzero();
                if(chkzero>=1)
                {
          walk();
                  continue;
                }
                if(kill==3)               //若是有三面死路
                  maze[x][y]='1';         //回填1
                x-=1;
          }
          else if(maze[x][y-1]!='1' && y-1>=0)
          {
                if(maze[x][y-1]=='e')     //判斷是否為終點
                {
                  print();
                  break;
                }
                chkzero=checkzero();
                if(chkzero>=1)
                {
          walk();
                  continue;
                }
                if(kill==3)               //若是有三面死路
                  maze[x][y]='1';         //回填1
                y-=1;
          }
          else if(maze[x 1][y]!='1' && x 1<10)
          {
                if(maze[x 1][y]=='e')     //判斷是否為終點
                {
                  print();
                  break;
                }
                chkzero=checkzero();
                if(chkzero>=1)
                {
          walk();
                  continue;
                }
                if(kill==3)               //若是有三面死路
                  maze[x][y]='1';         //回填1
                x =1;
          }
          else if(maze[x][y 1]!='1' && y 1<10)
          {
                if(maze[x][y 1]=='e')     //判斷是否為終點
                {
                  print();
                  break;
                }
                chkzero=checkzero();
                if(chkzero>=1)
                {
          walk();
                  continue;
                }
                if(kill==3)               //若是有三面死路
                  maze[x][y]='1';         //回填1
                y =1;
          }
          else
          {
        printf("no exit");
                break;
          }
        }
}
int checkno()                     //計算座標(x,y)四周有幾面死路
{
  int count=0;
  if(maze[x-1][y]=='1' || x-1<0)
    count=count 1;
  if(maze[x 1][y]=='1' || x 1==10)
        count=count 1;
  if(maze[x][y-1]=='1' || y-1<0)
        count=count 1;
  if(maze[x][y 1]=='1' || y 1==10)
        count=count 1;
  return(count);
}
void walk()                      //強制走0的位置
{
  if(maze[x-1][y]=='0' && x-1>=0)
  {
    maze[x-1][y]='s';
        x-=1;
  }
  else if(maze[x][y-1]=='0' && y-1>=0)
  {
    maze[x][y-1]='s';
        y-=1;
  }
  else if(maze[x 1][y]=='0' && x 1<10)
  {
    maze[x 1][y]='s';
        x =1;
  }
  else if(maze[x][y 1]=='0' && y 1<10)
  {
    maze[x][y 1]='s';
    y =1;
  }
}
int checkzero()                 //檢查是否有0
{
  int zero=0;
  if(maze[x-1][y]=='0' && x-1>=0)
    zero=1;
  if(maze[x][y-1]=='0' && y-1>=0)
        zero=1;
  if(maze[x 1][y]=='0' && x 1<10)
        zero=1;
  if(maze[x][y 1]=='0' && y 1<10)
        zero=1;
  return(zero);
}
void print()
{
  while(1)
  {
    if(maze[xprint-1][yprint]=='s')
        {
      maze[xprint][yprint]='1';
          printf("(%d,%d)",xprint,yprint);
          xprint-=1;
        }
        else if(maze[xprint 1][yprint]=='s')
        {
      maze[xprint][yprint]='1';
          printf("(%d,%d)",xprint,yprint);
          xprint =1;
        }
        else if(maze[xprint][yprint-1]=='s')
        {
      maze[xprint][yprint]='1';
          printf("(%d,%d)",xprint,yprint);
          yprint-=1;
        }
        else if(maze[xprint][yprint 1]=='s')
        {
      maze[xprint][yprint]='1';
          printf("(%d,%d)",xprint,yprint);
          yprint =1;
        }
        else
        {
      printf("(%d,%d)",xprint,yprint);
          printf("E\n");
          break;
        }
  }
}
記得把下列地圖存成maze.txt 0010e00111 0110101000 0000000001 1111110101 0001000010 1011000010 0010101010 1000001011 1001111001 0101010100
cashyy
高階會員


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-04-17 01:04:26 IP:59.104.xxx.xxx 未訂閱
給你參考一下 程式必須先讀入迷宮檔,以及使用者所輸入的起始座標(x,y),x表示列,y表示行 發表人 - cashyy 於 2005/04/17 01:06:47 發表人 - cashyy 於 2005/04/17 01:09:13
cathyboy
一般會員


發表:1
回覆:5
積分:1
註冊:2005-04-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-04-17 16:41:47 IP:218.171.xxx.xxx 未訂閱
謝謝這位大大,我會把你這題的邏輯搞懂在自已寫一次的= =thank you!
系統時間:2024-05-19 16:12:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!