走迷宫 傷城~ 2022-06-17 07:12 213阅读 0赞 通过栈将每次可以通过的路径保存起来。 但是要注意关于入口点和出口点的一些边界问题 一不小心就可能因为边界问题陷入死循环或者程序直接崩溃。 #pragma warning (disable:4996) #include<iostream> #include<stdlib.h> #include<fstream> #include<assert.h> #include<stack> using namespace std; class Pos { public: Pos(int x = 0, int y = 0) :_Row(x) , _Col(y) { } int _Row; int _Col; }; class Maze { public: Maze(int x = 0, int y = 0) :_row(x) , _col(y) , _map(NULL) , _start(0, 0) { } ~Maze() { if (_map != NULL) { for (int i = 0; i < _row; i++) { delete[] _map[i]; } delete[] _map; } } void SetMap(); void ShowMap(); bool PassMaze(); bool IsPass(Pos s); int _row; int _col; int **_map; Pos _start; int size; }; void Maze::SetMap() { char c; FILE *fp = fopen("maze.txt", "r"); //打开文件读取地图 assert(fp); //读取行 while ((c = fgetc(fp)) != ' '&&c != '\n') { _row = _row * 10 + (c - '0'); } //读取迷宫列 while ((c = fgetc(fp)) != ' '&&c != '\n') { _col = _col * 10 + (c - '0'); } //读取迷宫入口横坐标 while ((c = getc(fp)) != ' '&&c != '\n') { _start._Row = _start._Row * 10 + (c - '0'); } //读取迷宫入口纵坐标 while ((c = getc(fp)) != ' '&&c != '\n') { _start._Col = _start._Col * 10 + (c - '0'); } //开辟迷宫数组 _map = new int*[_row]; for (int i = 0; i < _row; i++) { _map[i] = new int[_col]; } for (int i = 0; i < _row; i++) { for (int j = 0; j < _col;) { c = getc(fp); //开始按字符读取存入到_map的二维数组中 if (c == '1' || c == '0') { _map[i][j] = c - '0'; j++; } } } fclose(fp); //关闭文件 } void Maze::ShowMap() { for (int i = 0; i < _row; i++) { for (int j = 0; j < _col; j++) { printf("%d ", _map[i][j]); } cout << endl; } } bool Maze::IsPass(Pos s) { if (s._Row>=0&&s._Row<_row&&s._Col>=0&&s._Col<_col&&_map[s._Row][s._Col] == 0) { return true; } else if (s._Row < 0 || s._Row >= _row || s._Col < 0 || s._Col >= _col) { return true; }//是为了判断已经越界则可以直接返回说明找到了出口 else { return false; } } bool Maze::PassMaze() { stack<Pos> s; s.push(_start); Pos seat; Pos Cur; while (!s.empty()) { seat = s.top(); Cur = seat; if (Cur._Row < 0 || Cur._Row >= _row || Cur._Col < 0 || Cur._Col >= _col) { return true; } _map[Cur._Row][Cur._Col] = 2; Cur._Row--; //向前走 if (IsPass(Cur)) { s.push(Cur); continue; } Cur = seat; Cur._Col--;//向左走 if (IsPass(Cur)) { s.push(Cur); continue; } Cur = seat; Cur._Col++;//向右走 if (IsPass(Cur)) { s.push(Cur); continue; } Cur = seat; Cur._Row++;//向后走 if (IsPass(Cur)) { s.push(Cur); continue; } Cur = seat; s.pop(); _map[Cur._Row][Cur._Col] = 3; } return false; return false; } void FunTest() { Maze p; p.SetMap(); p.ShowMap(); cout << endl; p.PassMaze(); p.ShowMap(); //p.PrintPath(); } int main() { FunTest(); /*p.ShowMap();*/ system("pause"); return 0; }
相关 走迷宫 走迷宫 Time Limit: 1000MS Memory limit: 65536K 题目描述 一个由n \ m 个格子组成的迷宫,起点是(1, 1), 终 向右看齐/ 2022年09月25日 11:21/ 0 赞/ 236 阅读
相关 走迷宫 走迷宫 Time Limit: 1000MS Memory limit: 65536K 题目描述 一个由n \ m 个格子组成的迷宫,起点是(1, 1), 终 喜欢ヅ旅行/ 2022年09月25日 11:20/ 0 赞/ 213 阅读
相关 走迷宫 走迷宫 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^\_^ 题目描述 一个由n \ m 个格子组成的迷宫, 电玩女神/ 2022年08月18日 02:28/ 0 赞/ 30 阅读
相关 走迷宫 Problem Description 有一个m\n格的迷宫(表示有m行、n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,输入这m\n个数据和起始点、结 分手后的思念是犯贱/ 2022年07月13日 13:40/ 0 赞/ 224 阅读
相关 走迷宫 走迷宫 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 超、凢脫俗/ 2022年07月12日 13:10/ 0 赞/ 229 阅读
相关 走迷宫 Problem Description 一个由n \ m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方向任意走一步,并且有些格子是 深藏阁楼爱情的钟/ 2022年07月12日 07:14/ 0 赞/ 245 阅读
相关 走迷宫 Problem Description 一个由n \ m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方向任意走一步,并且有些格子是 我不是女神ヾ/ 2022年07月12日 07:14/ 0 赞/ 220 阅读
相关 走迷宫 think: 1题目似乎没有很明显的模板性,我是否应该反思转换学习图的方法,自己目前的认识水平这个题目很难找到DFS与BFS的影子,自己应该把思维延伸,将DFS与BFS的思 港控/mmm°/ 2022年07月12日 07:05/ 0 赞/ 230 阅读
相关 走迷宫 通过栈将每次可以通过的路径保存起来。 但是要注意关于入口点和出口点的一些边界问题 一不小心就可能因为边界问题陷入死循环或者程序直接崩溃。 pragma war 傷城~/ 2022年06月17日 07:12/ 0 赞/ 214 阅读
相关 走迷宫 走迷宫 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 秒速五厘米/ 2022年06月10日 12:25/ 0 赞/ 223 阅读
还没有评论,来说两句吧...