看就知道是资料结构的作业....
你要的部分你可以去抄资料结构课本...
运气好的话通常里面都会有教你怎么做....
复制程式
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"); //找不到出口
}
}