标签:迷宫
#define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include<iostream> #include<assert.h> using namespace std; #define N 10 #include <stack> struct Pos //定义一个结构体,该结构体用来表示坐标 { int _row; int _col; }; void GetMaze(int* a, int n) { FILE* fout = fopen("MazeMap.txt", "r"); assert(fout); for (int i = 0; i < n; ++i) { for (int j = 0; j < n;) { char ch = fgetc(fout); if (ch == ‘0‘ || ch == ‘1‘) { a[i*n + j] = ch - ‘0‘; ++j; } else { continue; } } } fclose(fout); } void PrintMaze(int* a, int n) { for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { cout << a[i*n + j] << " "; } cout << endl; } cout << endl; } bool CheckIsAccess(int* a, int n, Pos next) { assert(a); if (next._row >= 0 && next._row < n && next._col >= 0 && next._col < n && a[next._row*n + next._col] == 0) { return true; } else { return false; } } bool MazePath(int* a, int n, const Pos& enrty, stack<Pos>& path) { Pos cur = enrty; path.push(cur); while (!path.empty()) { // 是否已经到出口 if (cur._row == n - 1) { return true; } a[cur._row*n + cur._col] = 2; Pos next = cur; // 上 next._row--; if (CheckIsAccess(a, n, next)) { cur = next; path.push(cur); continue; } // 右 next = cur; next._col++; if (CheckIsAccess(a, n, next)) { cur = next; path.push(cur); continue; } // 下 next = cur; next._row++; if (CheckIsAccess(a, n, next)) { cur = next; path.push(cur); continue; } // 左 next = cur; next._col--; if (CheckIsAccess(a, n, next)) { cur = next; path.push(cur); continue; } cur = path.top(); path.pop(); } return false; } void TestMaze() { int a[N][N] = {}; GetMaze((int*)a, N); PrintMaze((int*)a, N); stack<Pos> path; Pos enrty = { 2, 0 }; bool ret = MazePath((int*)a, N, enrty, path); cout << "是否有通路?" << ret << endl; PrintMaze((int*)a, N); } int main() { TestMaze(); getchar(); return 0; }
本文出自 “顺势而为” 博客,请务必保留此出处http://lk123456.blog.51cto.com/10831443/1763554
标签:迷宫
原文地址:http://lk123456.blog.51cto.com/10831443/1763554