看就知道是資料結構的作業....
你要的部分你可以去抄資料結構課本...
運氣好的話通常裡面都會有教你怎麼做....
複製程式
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"); //找不到出口
}
}