`

C++迷宫

 
阅读更多
#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++编程语言构建迷宫生成和解决算法的实践项目。通过这个项目,学习者可以掌握面向对象编程、数据结构和算法等核心IT知识,进一步提升编程...

    C++迷宫小游戏

    总的来说,实现一个C++迷宫游戏是一项综合性的编程任务,涵盖了文件操作、数据结构、算法、用户交互等多个方面的知识。通过这个项目,开发者不仅可以巩固C++的基础,还能提升解决问题和设计复杂程序的能力。

    C++迷宫程序代码经典完全包学包会

    **C++迷宫程序代码经典完全包学包会** 在编程世界中,设计和实现迷宫游戏是一种常见的练习,它可以帮助我们深入理解数据结构、算法以及面向对象编程的概念。本资源包提供了一个用C++语言编写的迷宫程序,旨在帮助...

    C++迷宫求解代码+报告

    总之,C++迷宫求解代码结合报告是一个很好的学习资源,可以帮助我们理解计算机科学中的路径查找算法,以及如何用C++有效地实现这些算法。对于初学者和进阶者来说,这是一个有价值的实践项目,可以提升编程技能和问题...

    c++迷宫最短路径寻径算法

    本项目聚焦于使用C++语言实现一个能够展示迷宫及最短路径的程序,允许用户自定义迷宫。其中,核心算法可能是A*(A-Star)算法,这是一种在图形搜索中广泛应用的启发式搜索方法。 A*算法结合了Dijkstra算法的最优性...

    C++ 迷宫算法

    《C++ 迷宫算法:链表实现与最短路径搜索》 在计算机科学领域,迷宫问题是一个经典的问题,它涉及到路径搜索、图论和算法设计。本篇将详细介绍如何使用C++语言,通过链表数据结构来解决迷宫路径搜索问题,并寻找...

    迷宫 c++ 迷宫详尽版

    通过上述技术,我们可以构建出一个交互性强、逻辑严密的C++迷宫游戏。在实际项目中,可能还需要考虑性能优化、多线程编程以提升用户体验,或者使用设计模式提高代码的可维护性和复用性。总的来说,这个"迷宫 C++ ...

    C++迷宫问题编程

    **C++迷宫问题编程** 在计算机科学领域,迷宫问题是一个经典的算法挑战,它涉及到路径寻找、图遍历和搜索策略。C++作为一种强大的、通用的编程语言,非常适合用于解决此类问题。以下是对该主题的详细阐述: 1. **...

    c++迷宫dos版 简易的源码

    《C++迷宫DOS版:简易源码解析与拓展》 在计算机科学的世界里,迷宫游戏是一种经典的编程挑战,它能锻炼程序员的空间思维能力和逻辑推理能力。本篇文章将详细解析一个基于C++编写的DOS版本迷宫游戏的源代码,并探讨...

    数据结构实验迷宫实现(C++代码)

    标签“C++迷宫”进一步强调了我们将利用C++来解决迷宫问题,这可能涉及到深度优先搜索(DFS)、广度优先搜索(BFS)或者其他路径查找算法。这些算法是数据结构和算法课程中的核心内容,对于理解和解决这类问题至关重要。...

    c++迷宫问题_算法实现_源代码 原创

    在C++编程中,解决迷宫问题是一种常见的算法挑战,主要涉及到路径搜索和图遍历。本项目通过原创的源代码实现了一个基于队列模型的迷宫问题解决方案,使用了广度优先搜索(BFS)策略来寻找从出口到入口的最短路径。 ...

    c++迷宫.rar

    本项目“c++迷宫.rar”是一个使用C++编程语言完成的数据结构课设,它实现了自动生成迷宫以及寻找迷宫中所有可能路径的功能。下面我们将详细探讨这个项目中的关键知识点。 首先,迷宫问题通常涉及到二维数组来表示...

    C++迷宫最短路径

    Eclipse下C++迷宫最短路径骨干程序,不完整

    C++迷宫源码

    摘要:VC/C++源码,游戏... C++迷宫游戏源码,程序中,坐标点,如(1,1),在输入时不需要输括号,直接输1,1。  该程序寻找的是最佳路径。  该程序可以图形显示迷宫。  该程序仅供学习使用,不能用于商业目的。

    C++迷宫实验设计程序

    在本项目中,"C++迷宫实验设计程序"是一个基于C++编程语言实现的迷宫求解器。这个程序不仅能够随机生成迷宫地图,还允许用户自定义障碍物的位置,具有动态显示路径搜索过程的功能。以下是关于这个项目的详细知识点:...

    c++迷宫求解,用栈,递归

    ### C++迷宫求解:使用栈与递归 在计算机科学中,迷宫求解问题是一个经典的算法问题,尤其在游戏开发、人工智能路径规划等领域有着广泛的应用。本篇文章将详细解析如何使用C++编程语言结合栈数据结构与递归算法来...

    c++迷宫非递归求解

    根据给定的文件信息,我们将深入探讨C++中非递归方法解决迷宫问题的关键知识点。迷宫问题在计算机科学中通常被用作路径寻找算法的示例,它要求找到从起点到终点的一条通路,同时避免迷宫中的障碍物。 ### 一、...

    基于C++迷宫问题 计算最短距离

    总结来说,"基于C++迷宫问题 计算最短距离"这个项目涵盖了以下几个关键知识点: 1. C++编程基础:语法、面向对象编程、标准库的使用。 2. 数据结构:二维数组/矩阵、队列、栈、链表、向量。 3. 算法:广度优先搜索...

    C++迷宫程序,文件读入,键盘控制走步

    在本项目中,我们探讨的是一个使用C++编程...总的来说,这个C++迷宫程序涵盖了文件I/O、数据结构、算法、用户输入处理、状态同步、计数和显示等多个核心编程概念,对于提升C++编程技能和理解软件设计有很好的实践价值。

    C++迷宫控制台程序(vs2012)

    **C++迷宫控制台程序(vs2012)** 在C++编程中,创建一个迷宫控制台程序是一项有趣且具有挑战性的任务。这里我们使用的环境是Visual Studio 2012,它是一个强大的集成开发环境(IDE),支持C++编程。这个项目通过堆栈...

Global site tag (gtag.js) - Google Analytics