#include <stdio.h>
#include <stdlib.h>
#include
#define MaxSize 100using namespace std;
int M=4,N=4;
int mg[6][6]={ {1,1,1,1,1,1}, {1,0,0,0,1,1}, {1,0,1,0,0,1}, {1,0,0,0,1,1}, {1,1,0,0,0,1}, {1,1,1,1,1,1}};
int minlen=MaxSize,maxlen=0;typedef struct{
int i; //路径横坐标
int j; //路径纵坐标
int di; //方向}
Box;typedef struct{
Box data[MaxSize];
int top;} SyType; //定义栈来存储数组void mgpath(int xi,int yi,int xe,int ye){
int i,j,k,di,find,count=1;
SyType
st,path,path1;
st.top=-1;
st.top++;
st.data[st.top].i=xi; //初始点进栈
st.data[st.top].j=yi;
st.data[st.top].di=-1; mg[xi][yi]=-1;
while(st.top>-1) //栈不空时循环 {
i=st.data[st.top].i;
j=st.data[st.top].j;
di=st.data[st.top].di;
if(ixe&&jye) //找到了出口,输出路径 { printf(“M:%d”,count++);
for(k=0; k<=st.top; k++) { printf("\t(%d,%d)",
st.data[k].i,st.data[k].j);
if((k+1)%50)
printf("\n"); }
printf("\n");
if(st.top+1<minlen) //比较输出最短路径 { for(k=0; k<=st.top; k++)
path.data[k]=st.data[k];
minlen=st.top+1; }
if(st.top+1>maxlen) //比较输出最长路径 { for(k=0; k<=st.top; k++)
path1.data[k]=st.data[k]; maxlen=st.top+1; }
mg[st.data[st.top].i][st.data[st.top].j]=0; //将该位置变为你其他路径可走的位置
st.top–;
i=st.data[st.top].i; j=st.data[st.top].j; di=st.data[st.top].di; }
find=0;
while(di<4&&find0)
//找下一个可走点 { di++; switch(di) { case 0:
i=st.data[st.top].i-1; j=st.data[st.top].j; break; case 1: i=st.data[st.top].i; j=st.data[st.top].j+1; break; case 2: i=st.data[st.top].i+1; j=st.data[st.top].j; break; case 3: i=st.data[st.top].i; j=st.data[st.top].j-1; break; } if(mg[i][j]==0) find=1; } if(find==1) //找到了下一个可走点 { st.data[st.top].di=di; //修改栈顶的di值 st.top++; //将下一个可走位置入栈 st.data[st.top].i=i; st.data[st.top].j=j; st.data[st.top].di=-1; mg[i][j]=-1; //避免重复走这个节点 } else //将这个节点变为其他节点可走的位置 { mg[st.data[st.top].i][st.data[st.top].j]=0; st.top--; } } printf("最短长度: %d\n",minlen); printf("最短路径如下: "); for(k=0; k<minlen; k++) { printf("(%d,%d) ",path.data[k].i,path.data[k].j); if((k+1)%5==0) printf("\n"); } printf("\n"); printf("最长长度: %d\n",maxlen); printf("最短路径如下: "); for(k=0; k<maxlen; k++) { printf("(%d,%d) ",path1.data[k].i,path1.data[k].j); if((k+1)%5==0) printf("\n"); }}int main(){ printf("迷宫路径如下:\n"); mgpath(1,1,M,N); return 0;}
作者:追风筝的咸鱼
来源:优快云
原文:https://blog.youkuaiyun.com/zw159357/article/details/72835005