走出迷宫功能【误】
2016-11-21 20:04
323 查看
打完区域赛之后好久没做题了,按理来说这样是不行的,但是因为区域赛战绩太烂,也和周围的人发生了一些事情,所以并没有心情做。。。
这博文的主要内容是因为我没带优盘在机房写了个小作业,发在这好带走。
这博文的主要内容是因为我没带优盘在机房写了个小作业,发在这好带走。
#include <stdio.h> #include <stdbool.h> #include <string.h> char maps[1000][1000]; bool vis[1000][1000]; int step[2][4] = {{1, 0, -1, 0}, {0, 1, 0, -1}}; int n, m; int top; int end_x, end_y; struct node { int x, y; }; struct node stk[1000000 + 5]; bool confirm(int x, int y) { if (x < 0 || x >= n || y < 0 || y >= m) return false; return true; } bool flag; void solve(int x, int y) { int i; if (maps[x][y] == 'E') { struct node tmp; tmp.x = m - x; tmp.y = y; stk[top] = tmp; flag = true; return; } for (i = 0; i < 4; ++i) { if (confirm(x + step[0][i], y + step[1][i]) && !vis[x + step[0][i]][y + step[1][i]] && maps[x + step[0][i]][y + step[1][i]] != '*') { vis[x][y] = true; struct node tmp; tmp.x = m - (x + step[0][i]); tmp.y = (y + step[1][i]); stk[top++] = tmp; solve(x + step[0][i], y + step[1][i]); if (flag) return; top--; } } return; } int main() { char ch; int i, j; int start_x, start_y; printf("Would you want to solve a maze? <y/n>: "); while (1) { scanf("%c", &ch); if (ch == 'n') break; else if (ch == 'y') { memset(maps, '\0', sizeof(maps)); memset(vis, false, sizeof(vis)); top = 0; flag = false; printf("Enter the length and width.\n"); printf("Length:"); scanf("%d", &n); printf("Width:"); scanf("%d", &m); printf("Enter the maze:\n<'.' is ground>\n<'*' is wall>\n<'S' is start>\n<'E' is end>\n"); for (i = 0; i < n; ++i) scanf("%s", maps[i]); for (i = 0; i < n; ++i) { for (j = 0; j < m; ++j) { if (maps[i][j] == 'E') { end_x = m - i; end_y = j; } if (maps[i][j] == 'S') { struct node tmp; tmp.x = m - i; start_x = i; tmp.y = start_y = j; stk[top++] = tmp; vis[i][j] = true; } } } solve(start_x, start_y); } else { printf("Can't recognize the order.Enter again:\n"); continue; } printf("Start from (%d,%d)\nEnd in (%d,%d)\n", stk[0].y + 1, stk[0].x, end_y + 1, end_x); printf("Path is:\n"); for (i = 0; i < top; ++i) { printf("(%d,%d)", stk[i].y + 1, stk[i].x); if (i < top - 1) printf(" -> "); } printf("\nPlay again? <y/n>: "); getchar(); } printf("Bye!\n"); return 0; }
相关文章推荐
- (转)走出MFC子类化的迷宫:子类化,SUBCLASSWINDOW ,MFC消息机制 ---(摘自CSDN论坛)
- 自动寻找走出迷宫的最短路径
- 走出这个迷宫
- 走出 JNDI 迷宫学习从容地寻找 bean 的Home接口
- 走出Java资源加载的迷宫
- 走出MFC子类化的迷宫
- 走出MFC子类化的迷宫:子类化,SUBCLASSWINDOW ,MFC消息机制
- 走出MFC窗口子类化的迷宫
- 翻译:走出类加载器迷宫
- 走出MFC窗口子类化的迷宫
- 走出MFC窗口子类化的迷宫
- 走出 JNDI 迷宫
- 走出MFC子类化的迷宫:子类化,SUBCLASSWINDOW ,MFC消息机制
- 翻译:走出类加载器迷宫
- 走出MFC窗口子类化的迷宫
- 【C语言】迷宫游戏设计思路与功能体会及简单的改进报告
- 走出MFC子类化的迷宫
- 6264:走出迷宫题解
- 走出Java资源加载的迷宫
- 走出MFC窗口子类化的迷宫