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" ); } } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
最新评论