用栈+循环实现走迷宫及演示c++

2021-03-01 04:27

阅读:741

标签:mes   sizeof   std   efi   end   printf   style   return   visit   

main.cpp

 1 #include  2 #include "mystack.h"
 3 #include  4 #include string.h>
 5 #include  6 using namespace std;
 7 #define MAXROW 10
 8 #define MAXLINE 10
 9 //1 代表墙,2 走过的路,0 代表路 Stack s; Point prePts[MAXROW][MAXLINE];
10 int maze[MAXROW][MAXLINE] =
11 { 
12 1,1,1,1,1,1,1,1,1,1,
13 0,0,0,1,1,1,1,1,1,1,
14 1,1,0,1,1,1,1,1,1,1,
15 1,1,0,0,0,0,1,1,1,1,
16 1,1,0,1,1,0,1,1,1,1,
17 1,1,0,1,1,0,1,1,1,1,
18 1,1,1,1,1,0,1,1,1,1,
19 1,1,1,1,1,0,0,0,1,1,
20 1,1,1,1,1,1,1,0,0,0,
21 1,1,1,1,1,1,1,1,1,1,
22 };
23 Stack s;
24 Point sp = {1,0},ep= {8,9},prePts[MAXROW][MAXLINE];
25 void displyMaze()
26 {
27     for(int i=0;i)
28     {
29         for(int j=0; j)
30         {
31             if(maze[i][j] == 1)
32                 printf("%2s"," *");
33             else if(maze[i][j] == 2)
34                 printf("%2s"," #");
35             else printf("%2s"," ");
36         }
37         putchar(10);
38     }
39     printf(" ====================\n");
40 }
41 void visit(int x,int y,Point prep)
42 {
43     Point p={x,y}; //当前点
44     push(&s,p);
45     prePts[x][y] = prep;
46 }
47 int main()
48 {
49     displyMaze();
50     initStack(&s);
51     memset(prePts,0xff,sizeof(Point)*MAXROW*MAXLINE);
52     push(&s,sp);
53     Point t;
54     int flag = 0;
55     while(!isStackEmpty(&s))
56     {
57         t = pop(&s);
58         maze[t._x][t._y] = 2; //不走回头路
59         //
60         if(t._y-1>=0&&maze[t._x][t._y-1] == 0)
61             visit(t._x,t._y-1,t);
62         //
63         if(t._y+19&&maze[t._x][t._y+1] == 0)
64             visit(t._x,t._y+1,t);
65         //
66         if(t._x-1>=0&&maze[t._x-1][t._y] == 0)
67             visit(t._x-1,t._y,t);
68         //
69         if(t._x+19&&maze[t._x+1][t._y] == 0)
70             visit(t._x+1,t._y,t);
71         system("cls");
72         displyMaze();
73         Sleep(1);
74         if(t._x == ep._x && t._y == ep._y)
75         {
76             flag = 1;
77             clearStack(&s);
78         }
79     }
80     if(flag == 1)
81     {
82         printf("find right path\n");
83         Point t = ep;
84         while(t._y != -1)
85         {
86             printf("(%2d,%2d)\n", t._x, t._y);
87             t = prePts[t._x][t._y];
88         }
89     }
90     else
91         printf("there is no way\n");
92     return 0;
93 }

mystack.cpp

 1 #include "mystack.h"
 2 #include  3 #include  4 void initStack(Stack * ps)
 5 {
 6     ps->top = NULL;
 7 }
 8 int isStackEmpty(Stack * ps)
 9 {
10     return ps->top == NULL;
11 }
12 void push(Stack *ps, Point ch)
13 {
14     SNode * cur = (SNode *)malloc(sizeof(SNode));
15     cur->_data = ch;    
16     cur->_next = ps->top;
17     ps->top = cur;
18 }
19 Point pop(Stack *ps)
20 {
21     SNode * t = ps->top;
22     Point ch = t->_data;
23     ps->top = ps->top->_next;
24     free(t);
25     return ch;
26 }
27 void clearStack(Stack * ps)
28 {
29     SNode * t;
30     while(ps->top)
31     {
32         t = ps->top;
33         ps->top = ps->top->_next;
34         free(t);
35     }
36 }

mystack.h

 1 #ifndef __MYSTACK_H__
 2 #define __MYSTACK_H__
 3 typedef struct _Point
 4 {
 5     int _x;
 6     int _y;
 7 } Point;
 8 typedef struct _SNode
 9 {
10     Point _data;
11     struct _SNode * _next;
12 }SNode;
13 typedef struct _Stack
14 {
15     SNode * top;
16 }Stack;
17 void initStack(Stack * ps);
18 int isStackEmpty(Stack * ps);
19 void push(Stack *ps, Point ch);
20 Point pop(Stack *ps);
21 void clearStack(Stack * ps);
22 #endif

 

用栈+循环实现走迷宫及演示c++

标签:mes   sizeof   std   efi   end   printf   style   return   visit   

原文地址:https://www.cnblogs.com/shaoqibeckyabcdefg/p/14449419.html


评论


亲,登录后才可以留言!