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