迷宫问题

来源:互联网 发布:乐宝是什么软件 编辑:程序博客网 时间:2024/05/01 18:29
#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

0 0
原创粉丝点击