[C] 求迷宫的最短路径(回溯算法) →→→→→进入此内容的聊天室

来自 , 2020-06-17, 写在 C, 查看 100 次.
URL http://www.code666.cn/view/1b5230e3
  1. typedef struct
  2. {
  3.         int x,y;
  4.         int pre;
  5. } sqtype;
  6. sqtype sq[num];
  7. int front,rear;
  8.  
  9.  
  10.  
  11. void path ( maze,move )
  12. int maze[m][n]/*迷宫数组*/
  13. item move[8]/*坐标增量数组*/
  14. { sqtype sq[NUM];
  15.   int front,rear;
  16.   int x,y,i,j,v;
  17.   front=rear=0;
  18.   sq[].x=1;
  19.   sq[].y=1;
  20.   sq[].pre=-1; /*入口点入队*/
  21.   maze[1,1]=-1;
  22.   while ( front<=rear ) /*队列不空*/
  23. {
  24. x=sq[front].x ;
  25.         y=sq[front ].y ;
  26.         for ( v=0; v<8; v++ )
  27.         {
  28.                 i=x+move[v].x;
  29.                 j=x+move[v].y;
  30.                 if ( maze[i][j]==0 )
  31.                 {
  32.                         rear++;
  33.                         sq[rear].x=i;
  34.                         sq[rear].y=j;
  35.                         sq[rear].pre=front;
  36.                         maze[i][j]=-1;
  37.                 }
  38.                 if ( i==m&&j==n )
  39.                 {
  40.                         printpath ( sq,rear ); /*打印迷宫*/
  41.                         restore ( maze ); /*恢复迷宫*/
  42.                         return 1;
  43.                 }
  44.         } /*for v*/
  45.         front++; /*当前点搜索完,取下一个点搜索*/
  46. } /*while*/
  47. return 0;
  48. } /*path*/
  49. void printpath ( sqtype sq[],int rear ) /*打印迷宫路径*/
  50. {
  51.         int i;
  52.         i=rear;
  53.         do
  54.         {
  55.                 printf (( %d,%d ) --,sq[i].x , sq[i].y ) ;
  56.                 i=sq[i].pre; /*回溯*/
  57.         }
  58.         while ( i!=-1 );
  59. } /*printpath*/
  60.  

回复 "求迷宫的最短路径(回溯算法)"

这儿你可以回复上面这条便签

captcha