C语言数据结构之迷宫问题

 更新时间:2019年03月24日 16:29:05   作者:lear_scu  
这篇文章主要为大家详细介绍了C语言数据结构之迷宫问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!
如果你想靠AI翻身,你先需要一个靠谱的工具!

本文实例为大家分享了数据结构c语言版迷宫问题栈实现的具体代码,供大家参考,具体内容如下

程序主要参考自严蔚敏老师的数据结构c语言版,在书中程序的大体框架下进行了完善。关于迷宫问题的思路可查阅原书。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include<iostream>
  
using namespace std;
  
#define MAXSIZE 10
typedef int Status;
typedef struct{
 int x;
  int y;
}Postype;
typedef struct{
 int ord;
 Postype seat;
 int dir;
}SElemType;//栈的元素类型
typedef struct{
 //SElemType data[MAXSIZE];
 SElemType* top;
 SElemType* base;
}Stack;//栈的结构类型
typedef struct{
 char arr[MAXSIZE][MAXSIZE];
}MAZETYPE;//迷宫结构体
  
MAZETYPE maze;
void InitMaze()
{
 maze.arr[0][0] = maze.arr[0][1] = maze.arr[0][2] = maze.arr[0][3] = maze.arr[0][4] = maze.arr[0][5] = maze.arr[0][6] = maze.arr[0][7] = maze.arr[0][8] = maze.arr[0][9] = '1';
 maze.arr[1][0] = maze.arr[1][3] = maze.arr[1][7] = maze.arr[1][9] = '1';
 maze.arr[1][1] = maze.arr[1][2] = maze.arr[1][4] = maze.arr[1][5] = maze.arr[1][6] = maze.arr[1][8] = '0';
 maze.arr[2][0] = maze.arr[2][3] = maze.arr[2][7] = maze.arr[2][9] = '1';
 maze.arr[2][1] = maze.arr[2][2] = maze.arr[2][4] = maze.arr[2][5] = maze.arr[2][6] = maze.arr[2][8] = '0';
 maze.arr[3][0] = maze.arr[3][5] = maze.arr[3][6] = maze.arr[3][9] = '1';
 maze.arr[3][1] = maze.arr[3][2] = maze.arr[3][3] = maze.arr[3][4] = maze.arr[3][7] = maze.arr[3][8] = '0';
 maze.arr[4][0] = maze.arr[4][2] = maze.arr[4][3] = maze.arr[4][4] = maze.arr[4][9] = '1';
 maze.arr[4][1] = maze.arr[4][5] = maze.arr[4][6] = maze.arr[4][7] = maze.arr[4][8] = '0';
 maze.arr[5][0] = maze.arr[5][4] = maze.arr[5][9] = '1';
 maze.arr[5][1] = maze.arr[5][2] = maze.arr[5][3] = maze.arr[5][5] = maze.arr[5][6] = maze.arr[5][7] = maze.arr[5][8] = '0';
 maze.arr[6][0] = maze.arr[6][2] = maze.arr[6][6] = maze.arr[6][9] = '1';
 maze.arr[6][1] = maze.arr[6][3] = maze.arr[6][4] = maze.arr[6][5] = maze.arr[6][7] = maze.arr[6][8] = '0';
 maze.arr[7][0] = maze.arr[7][2] = maze.arr[7][3] = maze.arr[7][4] = maze.arr[7][6] = maze.arr[7][9] = '1';
 maze.arr[7][1] = maze.arr[7][5] = maze.arr[7][7] = maze.arr[7][8] = '0';
 maze.arr[8][0] = maze.arr[8][1] = maze.arr[8][9] = '0';
 maze.arr[8][2] = maze.arr[8][3] = maze.arr[8][4] = maze.arr[8][5] = maze.arr[8][6] = maze.arr[8][7] = maze.arr[8][8] = '0';
 maze.arr[9][0] = maze.arr[9][1] = maze.arr[9][2] = maze.arr[9][3] = maze.arr[9][4] = maze.arr[9][5] = maze.arr[9][6] = maze.arr[9][7] = maze.arr[9][8] = maze.arr[9][9] = '1';
}
Status initStack(Stack &s)
{
 s.base = (SElemType*)malloc(MAXSIZE*sizeof(SElemType));
 if (!s.base) return 0;
 s.top = s.base;
 return 1;
}
void Push(Stack &s, SElemType e)
{
 *s.top++ = e;
}
void Pop(Stack &s, SElemType &e)
{
 e = *--s.top;
}
Status StackEmpty(Stack &s)
{
 if (s.top == s.base) return 1;
 else return 0;
}
Status Pass(Postype curpos)
{
 if (maze.arr[curpos.x][curpos.y] == '0')
 return 1;
 else return 0;
}
void Foot(Postype curpos)
{
 maze.arr[curpos.x][curpos.y] = '*';
}
void MarkPrint(Postype curpos)
{
 maze.arr[curpos.x][curpos.y] = '!';
}
Status StructCmp(Postype a, Postype b)
{
 if (a.x = b.x&&a.y == b.y) return 1;
 else return 0;
}
//下一个位置
Postype NextPos(Postype CurPos, int Dir)
{
 Postype ReturnPos;
 switch (Dir)
 {
 case 1:
 ReturnPos.x = CurPos.x;
 ReturnPos.y = CurPos.y + 1;
 break;
 case 2:
 ReturnPos.x = CurPos.x + 1;
 ReturnPos.y = CurPos.y;
 break;
 case 3:
 ReturnPos.x = CurPos.x;
 ReturnPos.y = CurPos.y - 1;
 break;
 case 4:
 ReturnPos.x = CurPos.x - 1;
 ReturnPos.y = CurPos.y;
 break;
 }
 return ReturnPos;
}
  
Status MazePath(Postype start, Postype end)
{
 Stack s;
 SElemType e;
 initStack(s);
 Postype curpos = start;
 int curstep = 1;
 do{
 if (Pass(curpos))
 {
  Foot(curpos);
  e = { curstep, curpos, 1 };
  Push(s, e);
  if (StructCmp(curpos, end)) return 1;
  curpos = NextPos(curpos, 1);
  curstep++;
 }
 else
 {
  if (!StackEmpty(s))
  {
  Pop(s, e);
  while (e.dir ==4 &&!StackEmpty(s))
  {
   MarkPrint(e.seat); Pop(s, e);
  }
  if (e.dir < 4 && !StackEmpty(s))
  {
   e.dir++;
   Push(s, e);
   curpos = NextPos(e.seat, e.dir);
  }
  }
  
  
 }
  
 } while (!StackEmpty(s));
 return 0;
  
}
  
int main()
{
 InitMaze();
 Postype s, e;
 s.x = s.y = 1;
 e.x = e.y = 8;
 if (MazePath(s, e))
 printf("迷宫成功解密!\n");
 else
 printf("解密失败\n");
 for (int i = 0; i < 10; i++)
 {
 for (int j = 0; j < 10; j++)
  {
  printf("%c ", maze.arr[i][j]);
  }
 printf("\n");
  }
 cout << "-=================================" << endl;
 for (int i = 0; i < 10; i++)
 {
 for (int j = 0; j < 10; j++)
 {
  if (maze.arr[i][j] == '*' || maze.arr[i][j] == '!')
  printf("%c ", maze.arr[i][j]);
  else cout << " ";
 }
 printf("\n");
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://blog.csdn.net/qq_36327328/article/details/81305490

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • c++实现扫雷小游戏代码分享

    c++实现扫雷小游戏代码分享

    这篇文章主要介绍了c++实现扫雷小游戏并附上代码分享,代码不能够实现当所查坐标周围雷的数量为0时,直接展开周围坐标,但有一点的知识性参考价值,需要的小伙伴可以参考一下
    2022-02-02
  • 快速掌握VC6.0中各种宏注释应用(附图)

    快速掌握VC6.0中各种宏注释应用(附图)

    为了方便别人或自己阅读自己的程序,注释是坚决不可少的,一个漂亮的程序,不是在于你应用的技术多么高深,而是能够把高深的技术描述的清楚易懂
    2013-01-01
  • C/C++中#define的妙用分享

    C/C++中#define的妙用分享

    本文主要介绍了C++/C关于#define的一些妙用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 一文读懂c++11 Lambda表达式

    一文读懂c++11 Lambda表达式

    这篇文章主要介绍了c++11 Lambda表达式的相关资料,帮助大家更好的理解和学习C++,感兴趣的朋友可以了解下
    2020-08-08
  • 《C++ Primer》隐式类类型转换学习整理

    《C++ Primer》隐式类类型转换学习整理

    在本篇文章里小编给大家整理的是关于《C++ Primer》隐式类类型转换学习笔记内容,需要的朋友们参考下。
    2020-02-02
  • C++实现LeetCode(127.词语阶梯)

    C++实现LeetCode(127.词语阶梯)

    这篇文章主要介绍了C++实现LeetCode(127.词语阶梯),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Clion(CMake工具)中引入第三方库的详细方法

    Clion(CMake工具)中引入第三方库的详细方法

    这篇文章主要介绍了Clion(CMake工具)中引入第三方库的详细方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • C语言数据结构之简易计算器

    C语言数据结构之简易计算器

    这篇文章主要为大家详细介绍了C语言数据结构之简易计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • c语言快速排序算法示例代码分享

    c语言快速排序算法示例代码分享

    快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)
    2014-02-02
  • Qt编写地图实现闪烁点图的示例代码

    Qt编写地图实现闪烁点图的示例代码

    闪烁点图的核心有三个要素,城市的名称、城市的经纬度、对应值的大小,当值越大闪烁点也就越大,本文就来实现一下地图闪烁点图,具有一定的参考价值,感兴趣的可以了解一下
    2021-12-12

最新评论