还写不完整(哪位高手能帮修改一下呢)

作者在 2011-10-15 14:49:25 发布以下内容
#include<stdio.h>
#define m 10
#define n 15
#define NUM m*n
typedef struct
{
   int x,y;/*x,y为到达点的坐标*/
   int pre;/*pre为(x,y)的前驱点在数组sq中的下标*/
}sqtype;
int maze[m+1][n+1];
typedef struct
{
   int dx;
   int dy;
}moved;

void shortpath(int maze[m][n],moved move[8])

   sqtype sq[NUM];
   int front,rear;
   int x,y,i,j,v;
   front=rear=0;
   sq[0].x=1;
   sq[0].y=1;
   sq[0].pre=-1;/*选(1,1)点为入口点入队*/
   maze[1][1]=-1;/*表示该点搜索过了,所以置成-1。该点是入口点,原值为0*/
   while(front<=rear)/*队列不空*/
   {
        x=sq[front].x;
        y=sq[front].y;
        for(v=0;v<8;v++)/*循环扫描每个方向,共八个方向*/
  {
             i=x+move[v].dx;
    j=x+move[v].dy;/*选择一个前进的方向(i,j)*/
             if(maze[i][j]==0)/*如果该方向可走*/
               {
                  rear++;/*入队*/
                  sq[rear].x=i;
                  sq[rear].y=j;
                  sq[rear].pre=front;
                  maze[i][j]=-1;/*将其赋值为-1,以免重复搜索*/
                }
              if(i==m && j==n)/*找到了出口*/
     {
      printpath(sq,rear);/*打印迷宫*/
                   restore(maze);/*回复迷宫,使数组maze中的-1全变成0*/
                   return 1;
     }
  }
          front++;/*当前点搜索完,取下一个点搜索*/
   }
          return 0;
}

void printpath(sqtype sq[],int rear)/*打印迷宫*/
{
   int i;
   i=rear;
   do
   {
       printf("(%d,%d)?",sq[i].x,sq[i].y);
       i=sq[i].pre;/*回溯*/
   }
    while(i!=-1);
}
默认分类 | 阅读 541 次
文章评论,共0条
游客请输入验证码
文章分类
文章归档
最新评论