#include <iostream> #include <iomanip> #include "Stack.h" //#define UNIT_TEXT usingstd::cout; usingstd::cin; usingstd::endl; usingstd::setw; DIRECTION getNextDirection(DIRECTION d) { switch(d) { case NORTH: d= EAST; break; case EAST: d= SOUTH; break; case SOUTH: d= WEST; break; case WEST: d= NORTH; break; } return d; } int main(int argc, char*argv[]) { // MAZE //int mazeArray[X][Y] = { // {1, 0, 1, 1}, // {1, 0, 1, 1}, // {1, 1, 1, 1}, // {1, 1, 0, 1}, //}; //int mazeArray[][8] = { // {1, 1, 0, 1, 1, 1,0, 0}, // {0, 1, 0, 1, 0, 1,0, 0}, // {0, 1, 1, 1, 0, 1,0, 0}, // {0, 0, 0, 0, 0, 1,0, 0}, // {0, 0, 0, 1, 1, 1,0, 0}, // {0, 0, 0, 1, 0, 0,0, 0}, // {0, 0, 0, 1, 0, 0,1, 1}, // {0, 0, 0, 1, 1, 1,1, 1}, //}; //int mazeArray[][12] = { // {1, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0}, // {1, 0, 1, 0, 0, 0,0, 0, 0, 0, 0, 0}, // {1, 1, 1, 0, 1, 1,1, 0, 0, 0, 0, 0}, // {0, 0, 1, 0, 1, 0,1, 0, 0, 0, 0, 0}, // {0, 0, 1, 0, 1, 0,1, 0, 0, 0, 0, 0}, // {0, 1, 1, 0, 1, 0,1, 0, 0, 0, 0, 0}, // {0, 1, 1, 1, 1, 0,1, 0, 0, 0, 0, 0}, // {0, 0, 0, 0, 0, 1,1, 0, 0, 0, 0, 0}, // {0, 0, 0, 0, 0, 1,0, 1, 1, 1, 1, 1}, // {0, 0, 0, 0, 0, 1,0, 1, 0, 0, 0, 1}, // {0, 0, 0, 0, 0, 1,1, 1, 0, 0, 0, 1}, // {0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 1}, //}; int mazeArray[][20] = { {1,1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //1 {0,1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //2 {1,1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //3 {1,0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //4 {1,1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //5 {0,0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //6 {0,0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //7 {1,0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //8 {1,0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //9 {1,0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //10 {1,0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //11 {1,0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0}, //12 {1,0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, //13 {1,0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, //14 {1,0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0}, //15 {1,0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}, //16 {1,0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, //17 {1,0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}, //18 {0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, //19 {0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, //20 }; //int mazeArray[][5] = { // {1, 1, 1, 0, 0}, // {0, 0, 1, 0, 0}, // {0, 1, 1, 0, 0}, // {0, 1, 0, 1, 1}, // {0, 1, 1, 1, 1}, //}; //int mazeArray[][6] = { // {1, 1, 0, 0, 0,0}, // {0, 1, 0, 0, 0,0}, // {1, 1, 0, 0, 0,0}, // {1, 0, 0, 0, 0,0}, // {1, 0, 0, 1, 1,1}, // {1, 1, 1, 1, 0,1}, //}; StackmazeStack; MAZEe; int i = 0, j = 0; int temp = 0; DIRECTIOND = EAST; bool shiftDirection = false; MAZEm1 = {i, j, EAST, EAST}; mazeStack.push(m1); cout<< "从("<< i << "," << j<< ")开始探索...\n"; int X = 20; int Y = 20; do { if(mazeStack.top->data.i == X - 1 &&mazeStack.top->data.j == Y - 1) { cout<< "到达出口!\n"; break; } i= mazeStack.top->data.i; j= mazeStack.top->data.j; switch(mazeStack.top->data.d) { case NORTH: cout<< "开始探索北方向::"; if(i > 0) { i--; }else { shiftDirection= true; } break; case EAST: cout<< "开始探索东方向::"; if(j < X - 1) { j++; }else { shiftDirection= true; } break; case SOUTH: cout<< "开始探索南方向:"; if(i < X - 1) { i++; }else { shiftDirection= true; } break; case WEST: cout<< "开始探索西方向:"; if(j > 0) { j--; }else { shiftDirection= true; } break; } if(shiftDirection) { cout<< "已经到达边界, 切换方位...\n"; mazeStack.top->data.d= getNextDirection(mazeStack.top->data.d); if(mazeStack.top->data.d ==mazeStack.top->data.o) { cout<< "此路径为错误路径,出栈!\n"; mazeStack.pop(&e); } shiftDirection= false; continue; } if(mazeArray[i][j] == 1) { cout<< "\t探索 (" << i << "," << j << ") 成功!\n"; // 设置起点方向 switch(mazeStack.top->data.d) { case NORTH: D= SOUTH; break; case EAST: D= WEST; break; case SOUTH: D= NORTH; break; case WEST: D= EAST; break; } cout<< "切换上路径方位?...\n"; mazeStack.top->data.d= getNextDirection(mazeStack.top->data.d); MAZEnewMaze = {i, j, getNextDirection(D), D}; mazeStack.push(newMaze); } else { cout<< "\t探索(" << i << "," << j << ") 失败!\n"; cout<< "切D换?方¤?位?...\n"; mazeStack.top->data.d= getNextDirection(mazeStack.top->data.d); if(mazeStack.top->data.d ==mazeStack.top->data.o) { cout<< "此路径为错误路径出栈!\n"; mazeStack.pop(&e); } } } while(!mazeStack.isEmpty()); cin.get(); return 0; }
相关推荐
一个迷宫最短路径寻径算法,可显示迷宫,路径。可修改迷宫。
C++迷宫问题求解,随机生成迷宫存放于二维数组,为保证至少有一条通路,再生成一条路径置入迷宫中,然后回溯法求解
C++迷宫求解代码+报告。帮助同学学习探讨。如有不足敬请谅解!
迷宫 c++ 迷宫详尽版 迷宫 c++ 迷宫详尽版迷宫 c++ 迷宫详尽版迷宫 c++ 迷宫详尽版
用C++实现的一个简单的迷宫游戏,通过文件来存储迷宫地图
Eclipse下C++迷宫最短路径骨干程序,不完整
摘要:VC/C++源码,游戏... C++迷宫游戏源码,程序中,坐标点,如(1,1),在输入时不需要输括号,直接输1,1。 该程序寻找的是最佳路径。 该程序可以图形显示迷宫。 该程序仅供学习使用,不能用于商业目的。
迷宫代码用C++写的,简单易懂 方便仿写
这是一篇课程设计,包含源代码,设计思路很清晰。
建立队列模型。分别找到迷宫的入口和出口,由迷宫出口向入口寻找路径,寻找方法为:广度遍历法。
c++非递归求解 大家看看
c++迷宫求解,用栈,递归 doc类型文档
c++迷宫求解的源代码
c++迷宫实验代码
利用C和C++输出迷宫,输入玩家信息,并进行排序,一次生成一张图,从文件调用。可以人玩,也可以机玩
数据结构 C++ 迷宫求解 课程设计数据结构 C++ 迷宫求解 课程设计
非常简单的C++迷宫程序,是数据结构课程要求的作业。只要会链栈就能看得懂,visual C++6.0写的
C++迷宫程序,迷宫从文件(可变)读入,键盘控制方向,同步更新迷宫状态,显示碰壁次数和步数,含文档
C++迷宫(EGE库),红色代表玩家,黑色代表障碍,绿色代表终点
C++迷宫源码 WIN32 APPLICATION : maze AppWizard has created this maze application for you. This file contains a summary of what you will find in each of the files that make up your maze ...