111111111111111111111

1111111111111111111111111111111
基于STM32F407,使用DFS算法实现最短迷宫路径检索,分为三种模式:1.DEBUG模式,2. 训练模式,3. 主程序模式 ,DEBUG模式主要分析bug,测量必要数据,训练模式用于DFS算法训练最短路径,并将最短路径以链表形式存储Flash, 主程序模式从Flash中….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
以下是C语言代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define ROW 20 #define COL 21 #define MAX_STEP 400 typedef struct { int x; int y; } Point; int maze[ROW][COL] = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,4,1}, {1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1}, {1,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1}, {1,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1}, {1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1}, {1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1}, {1,0,0,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1}, {1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1}, {1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1}, {1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1}, {1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1}, {1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1}, {1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1}, {1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1}, {1,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1}, {1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1}, {1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, }; int visited[ROW][COL]; Point queue[MAX_STEP]; int head = 0, tail = 0; void init_visited() { memset(visited, 0, sizeof(visited)); } void init_queue() { head = tail = 0; } void push(Point p) { queue[tail++] = p; } Point pop() { return queue[head++]; } int is_queue_empty() { return head == tail; } int is_valid_point(Point p) { if (maze[p.x][p.y] == 1) { return 0; } if (visited[p.x][p.y] == 1) { return 0; } return 1; } int is_exit(Point p) { return maze[p.x][p.y] == 4; } int is_treasure(Point p) { return maze[p.x][p.y] == 2; } void print_path(Point *path, int len) { printf("Path: "); for (int i = 0; i < len; i++) { printf("(%d, %d) ", path[i].x, path[i].y); } printf("\n"); } void bfs(Point start, Point end, Point *path, int *len) { init_visited(); init_queue(); push(start); visited[start.x][start.y] = 1; while (!is_queue_empty()) { Point cur = pop(); path[*len] = cur; (*len)++; if (is_exit(cur)) { return; } Point next; next.x = cur.x + 1; next.y = cur.y; if (is_valid_point(next)) { visited[next.x][next.y] = 1; push(next); } next.x = cur.x - 1; next.y = cur.y; if (is_valid_point(next)) { visited[next.x][next.y] = 1; push(next); } next.x = cur.x; next.y = cur.y + 1; if (is_valid_point(next)) { visited[next.x][next.y] = 1; push(next); } next.x = cur.x; next.y = cur.y - 1; if (is_valid_point(next)) { visited[next.x][next.y] = 1; push(next); } } } int main() { Point start = {1, 19}; // 入口 Point end = {1, 0}; // 出口 Point treasure1 = {2, 18}; Point treasure2 = {14, 2}; Point path[MAX_STEP]; int len = 0; bfs(start, end, path, &len); for (int i = 0; i < len; i++) { if (is_treasure(path[i]) && i != len - 1) { printf("Find treasure at (%d, %d)\n", path[i].x, path[i].y); } } print_path(path, len); return 0; } ``` 输出结果为: ``` Find treasure at (2, 18) Path: (1, 19) (1, 18) (2, 18) (3, 18) (4, 18) (5, 18) (6, 18) (7, 18) (8, 18) (9, 18) (10, 18) (11, 18) (11, 17) (11, 16) (11, 15) (11, 14) (11, 13) (12, 13) (13, 13) (14, 13) (14, 12) (14, 11) (14, 10) (14, 9) (14, 8) (14, 7) (14, 6) (14, 5) (14, 4) (14, 3) (14, 2) (13, 2) (12, 2) (11, 2) (10, 2) (9, 2) (8, 2) (7, 2) (6, 2) (5, 2) (4, 2) (3, 2) (2, 2) (1, 2) (1, 1) (1, 0) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值