正在加载图片...
queue[]的容量最大为mn。 queue的每一个元素有三个域:x,y,pre。其中 x和y分别记下每一个到达点的行、列坐标,pre则是一个静态链域,他保 存到达该点的出发点在 queue中的下标。该队列的头尾指针 front和rear 分别指向实际的队头和队尾元素。例如开始时,队列中只有一个元素,即入 口点[1][1],它的pre域值为0,因为不是从其它出发点到达[1][1的。 front 和rear同时指向该元素。此后搜索时,均以 front所指的元素作为搜索的 出发点,当找到一个可到达点时,将该点的坐标及出发点的下标一起入队 而rear始终指向当前入队列的可到达点元素。假如 front所指的点出发搜 索完毕,则使 front指向下一个新的出发点,继续搜索。一直到找到出口点, 或者当前队列为空结束。前者表示成功找到通路,而后者则表示迷宫无通路。 在输出通路时,由于是从队列的队尾(出口)向队头(入口)回溯,得 到的结果序列就是从出口到入口。为了保证输出通路是从入口到出口,需将 队列中回溯得到的结果先入栈,然后再从栈中输出 [算法实现 # define m212/*M2×N2为实际使用的迷宫数组的大小*/ #define n2 11 # define maXlen m2米2/2/队列和栈的长度*/ #define Ture 1 #define False 0 # include“ stido.h” tM=M2-2,N=N2-2 /*M×N为迷宫大小*/ typedef struct /*定义栈元素的类型* typedef struct/*定义顺序栈* lelemt ype stack [MAXLENT int top I sgstktr typedef struct/*定义队列元素的类型*/ lint x, y,pre I quelet; typedef struct/*定义顺序队列*/ e [MAXLEN] int front, rear: struct moved/*定义方向位移数组元素的类型* fint dx: dy;queue[]的容量最大为 m*n。queue 的每一个元素有三个域:x,y,pre。其中 x 和 y 分别记下每一个到达点的行、列坐标,pre 则是一个静态链域,他保 存到达该点的出发点在 queue 中的下标。该队列的头尾指针 front 和 rear 分别指向实际的队头和队尾元素。例如开始时,队列中只有一个元素,即入 口点[1][1],它的 pre 域值为 0,因为不是从其它出发点到达[1][1]的。front 和 rear 同时指向该元素。此后搜索时,均以 front 所指的元素作为搜索的 出发点,当找到一个可到达点时,将该点的坐标及出发点的下标一起入队。 而 rear 始终指向当前入队列的可到达点元素。假如 front 所指的点出发搜 索完毕,则使 front 指向下一个新的出发点,继续搜索。一直到找到出口点, 或者当前队列为空结束。前者表示成功找到通路,而后者则表示迷宫无通路。 在输出通路时,由于是从队列的队尾(出口)向队头(入口)回溯,得 到的结果序列就是从出口到入口。为了保证输出通路是从入口到出口,需将 队列中回溯得到的结果先入栈,然后再从栈中输出。 [算法实现] #define M2 12 /*M2×N2 为实际使用的迷宫数组的大小*/ #define N2 11 #define MAXLEN M2*N2/2 /*队列和栈的长度*/ #define Ture 1 #define False 0 #include “stido.h” int M=M2-2,N=N2-2; /* M×N 为迷宫大小*/ typedef struct /*定义栈元素的类型*/ {int x,y; }elemtype; typedef struct /*定义顺序栈*/ {elemtype stack[MAXLEN]; int top; }sqstktp; typedef struct /*定义队列元素的类型*/ {int x,y,pre; }queeletp; typedef struct /*定义顺序队列*/ {queeletp queue[MAXLEN]; int front,rear; }queuetp; struct moved /*定义方向位移数组元素的类型*/ {int dx;dy; };
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有