数据结构-顺序队列解决最短迷宫路径问题

来源:互联网 发布:得力33113考勤软件 编辑:程序博客网 时间:2024/05/21 09:04
#include<stdio.h>#include<stdlib.h>#define MaxSize 100int M=8,N=8;int mg[10][10]={{1,1,1,1,1,1,1,1,1,1},{1,0,0,1,0,0,0,1,0,1},{1,0,0,1,0,0,0,1,0,1},{1,0,0,0,0,1,1,0,0,1},{1,0,1,1,1,0,0,0,0,1},{1,0,0,0,1,0,0,0,0,1},{1,0,1,0,0,0,1,0,0,1},{1,0,1,1,1,0,1,1,0,1},{1,1,0,0,0,0,0,0,0,1},{1,1,1,1,1,1,1,1,1,1}};typedef struct{    int i,j;    //i,j分别为横纵坐标    int pre;    //路径的方向}Box;typedef struct{    Box data[MaxSize];    int front,rear;}QuType;void print(QuType qu,int front);int mgpath();int mgpath(int xi,int yi,int xe,int ye){  int i,j,find=0,di;  QuType qu;  qu.front=qu.rear=-1;     //队列初始化  qu.rear++;  qu.data[qu.rear].i=xi;   //起点进队  qu.data[qu.rear].j=yi;  qu.data[qu.rear].pre=-1;  mg[xi][yi]=-1;  while(qu.front!=qu.rear&&!find)  //队不空和未找到合适位置时循环  {      qu.front++;      i=qu.data[qu.front].i;      j=qu.data[qu.front].j;      if(i==xe&&j==ye)      {          find=1;          print(qu,qu.front);          return 1;      }      for(di=0;di<4;di++)      {          switch(di)          {              case 0:i=qu.data[qu.front].i-1;j=qu.data[qu.front].j;break;              case 1:i=qu.data[qu.front].i;j=qu.data[qu.front].j+1;break;              case 2:i=qu.data[qu.front].i+1;j=qu.data[qu.front].j;break;              case 3:i=qu.data[qu.front].i;j=qu.data[qu.front].j-1;break;          }          if(mg[i][j]==0)          {              qu.rear++;              qu.data[qu.rear].i=i;              qu.data[qu.rear].j=j;              qu.data[qu.rear].pre=qu.front;              mg[i][j]=-1;          }      }  }  return 1;}void print(QuType qu,int front){    int k=front,j,ns=0;    printf("\n");    do    {        j=k;        k=qu.data[k].pre;        qu.data[j].pre=-1;    }while(k!=0);             //反向搜索找出最短路径    printf("迷宫路径图如下:\n");    k=0;    while(k<64)    {        if(qu.data[k].pre==-1)        {            ns++;            printf("\t(%d,%d)",qu.data[k].i,qu.data[k].j);            if(ns%5==0)                printf("\n");        }        k++;    }    printf("\n");}int main(){    if(!mgpath(1,1,M,N))        printf("该迷宫问题没有解!");    return 0;}


 
原创粉丝点击