C語言用堆疊寫老鼠走迷宮? (急QQ)

Home Home
引用 | 編輯 billy7074396
2012-11-14 19:36
樓主
推文 x1
編譯器是Dev C++  
先讀入txt檔裡面有迷宮的圖!!
1代表牆壁  0代表可以走的路
類似這樣

0111111111
1000111111
1110110001
1110111111
1110000111
1110110111
1111101101
1111101011
1100000001
1111111110
最外層一定是牆壁所以是1   左上角是0代表入口  右下角是0代表出口
可以走的方向有  八個方向(並非上下左右而已)
要用堆疊寫 Stack 
上面的程式碼是我目前寫的!!  可是後面的判斷我就不會寫了!!  希望大大幫幫忙!!

#include <stdio.h>
#include &l ..

訪客只能看到部份內容,免費 加入會員



獻花 x0
引用 | 編輯 ChaosX
2012-11-14 19:57
1樓
  
看就知道是資料結構的作業....
你要的部分你可以去抄資料結構課本...
運氣好的話通常裡面都會有教你怎麼做....


複製程式
void path(void)
{
   int i,row,col,nextRow,nextCol,dir,found = FALSE;
   offsets move[8] = {{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}}; //移動方向 
   element position;
   mark[1][1] = 1; //起始位置標記為1 
   top = 0;  //堆疊陣列最上面的元素位置為0 
   stack[0].row=1;  
   stack[0].col=1;
   stack[0].dir=1;
   while(top > -1 && !found)   //有堆疊而且找不到出口 
   {
      position = pop();   //將堆疊最上面的元素拿出來
      row = position.row;  
      col = position.col;   
      dir = position.dir;   
      while(dir < 8 && !found)   //還有其他方向沒有找而且找不到出口
      {
         nextRow = row + move[dir].vert;     //產生下一步row位置 
         nextCol = col + move[dir].horiz;    //產生下一步col位置 
         
         if(nextRow == EXIT_ROW && nextCol == EXIT_COL)  //判定是否為出口 
         {
           found = TRUE;        //是的話就找到了 
         }
         else if(!maze[nextRow][nextCol] && !mark[nextRow][nextCol]) //是否可以走而且是沒走過的路 
         {
           mark[nextRow][nextCol] = 1;  //對找到的下一步做標記 
           position.row = row;     //現在row位置  
           position.col = col;     //現在col位置 
           position.dir = ++dir;   //下次走的方向 
           push(position);         //放入堆疊 
           row = nextRow;          //下次的row位置 
           col = nextCol;          //下次的col位置 
           dir = 0;                //從第一組移動方向開始找起 
         }
         else
         {
               ++dir;               //換下一組移動方向 
         } 
      }
   }
   
   if(found)                 //有找到出口的話 
   {
     printf("The path is:\n");
     printf("row col\n");
     for(i=0;i<=top;i++)                
     {
       printf("%2d%5d \n",stack[i].row,stack[i].col);    //印出在堆疊的路徑 
       maze[stack[i].row][stack[i].col]=2;   //等等印出迷宮時順便印出老鼠的路徑
     }
     printf("%2d%5d \n",row,col);    //印出現在位置 
     printf("%2d%5d \n",EXIT_ROW,EXIT_COL);  //印出出口位置 
     
     maze[row][col] = 2;      //等等印出迷宮時順便印出現在位置 
     maze[EXIT_ROW][EXIT_COL] = 2; //等等印出迷宮時順便印出終點 
     
   }
   else
   {
     printf("The maze does not have a path\n");    //找不到出口
   }   
}


獻花 x3
引用 | 編輯 billy7074396
2012-11-14 20:26
2樓
  
謝謝你的解答喔!!
你的寫法跟我課本寫的是差不多的!!
也許我不懂的是"堆疊"的架構和寫法而已!!
課本寫的程式碼有些我沒學過! 實在是有看沒有懂> < !!
不過還是謝謝你的幫忙!! 讓我多一個參考~~

獻花 x0
引用 | 編輯 ChaosX
2012-11-14 22:05
3樓
  
下面是引用 billy7074396 於 2012-11-14 20:26 發表的 : 到引言文
謝謝你的解答喔!!
你的寫法跟我課本寫的是差不多的!!
也許我不懂的是"堆疊"的架構和寫法而已!!
課本寫的程式碼有些我沒學過! 實在是有看沒有懂> < !!
不過還是謝謝你的幫忙!! 讓我多一個參考~~
因為我當初寫這作業也是抄課本的XD

獻花 x0