引用 | 編輯
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 |