`

回溯走迷宫

阅读更多
#include<iostream>
#include"LinkedStack.cpp"
using namespace std;

class Point{
public:
    int x;
    int y;
public:
    Point():x(0),y(0){}
    Point(int i,int j):x(i),y(j){}
};

template<typename T>
int fun(int (*a)[10],int i,int j,LinkedStack<T>& sk)
{
    int cx,cy;
    Point p(0,0);
    for(int x=1;x>=-1;--x){
        for(int y=1;y>=-1;--y){
            cx = x+i;
            cy = y+j;
            if((x==0&&y==0)||cx<0||cy<0||cx>9||cy>9)
                continue;
            if(*(*(a+cx)+cy)==0){
                p = Point(cx,cy);
                sk.Push(p);
                *(*(a+cx)+cy)=1;
                if(cx==9&&cy==9)
                    return 1;
                if(fun(a,cx,cy,sk)){
                    return 1;
                }
            }
        }
    }
    sk.Pop(p);
    return 0;
}

int main()
{
    LinkedStack<Point> sk;
    int a[10][10]={
        1,1,1,1,0,1,1,1,1,1,
        0,1,1,0,1,1,0,0,0,1,
        1,0,0,1,0,1,1,0,0,1,
        1,1,1,0,1,1,1,1,0,1,
        1,1,1,0,1,0,1,0,1,1,
        1,1,1,0,0,1,0,1,1,1,
        1,1,0,1,1,1,0,1,1,1,
        1,1,1,0,1,1,0,1,1,1,
        1,1,1,1,1,1,1,0,0,1,
        1,1,1,1,1,1,1,1,1,0
    };
    Point pStart(1,1);
    sk.Push(pStart);
    fun(a,1,0,sk);
    while(not sk.IsEmpty()){
        sk.Pop(pStart);
        cout << "[" << pStart.x << "," << pStart.y << "] ";
    }
    cout << endl;
}

[9,9] [8,8] [8,7] [7,6] [6,6] [5,6] [4,5] [5,4] [4,3] [3,3] [2,2] [2,1] [1,1] 
分享到:
评论

相关推荐

    回溯法走迷宫

    数据结构走迷宫算法,学习了他人的之后自己写的程序,运行OK

    回溯法求解走迷宫问题(八个方向)

    迷宫问题。迷宫问题的求解是实验心理学中的一个经典问题,心理学家把一只老鼠从一个无顶盖的大盒子的入口处赶进迷宫,迷宫中设置很多隔壁,对前进方向形成了多处障碍,心理学...设计回溯算法实现如图所示的迷宫的求解。

    c语言回溯法走迷宫的源码

    在C语言中实现回溯法走迷宫,主要涉及以下几个关键知识点: 1. **数据结构**:首先,我们需要定义一个数据结构来表示迷宫。这通常是一个二维数组,其中每个元素代表一个节点,值可以是0或1,0表示可通行,1表示障碍...

    回溯法解迷宫问题

    回溯法是一种在解决问题时通过试探性的步骤来寻找答案的算法策略,当发现某一步走不通时,会退回上一步,甚至更早的步骤,尝试其他路径,直到找到所有可能的解决方案或者证明无解。在本案例中,"回溯法解迷宫问题"是...

    迷宫(回溯法实现).rar

    在本案例中,我们关注的是使用回溯法来解决迷宫问题,这是一种经典的计算机科学算法,尤其适用于解决无解或多解的问题。谭浩强的《C语言程序设计》一书对这个问题进行了详细的阐述,下面我们将深入探讨迷宫问题的...

    用回溯法解决迷宫问题

    用回溯法完成迷宫问题,思路比较简单,有详细的注释

    回溯法解迷宫问题.

    ### 回溯法解迷宫问题 #### 一、引言 迷宫问题是计算机科学中的一个经典问题,常被用来测试算法效率与解决问题的能力。在众多解决迷宫问题的方法中,回溯法因其简单易懂且能有效找到解而被广泛采用。本文将通过...

    老鼠走迷宫C++

    【标题】"老鼠走迷宫C++"是一个编程项目,主要目标是使用C++语言来模拟老鼠在迷宫中寻找出路的过程,并可视化显示老鼠走过的路径。这个项目可以帮助学习者深入理解C++编程语言,同时涉及到算法设计和数据结构的应用...

    利用回溯法解决迷宫问题

    该算法可以随机产生任意大小的迷宫,迷宫的大小由用户输入决定 回溯法解决迷宫是个经典算法,利用顺序栈来存储迷宫路线 如果能成功走出迷宫,可以画出迷宫轨迹

    回溯法解迷宫问题程序框图

    开始走迷宫** 程序从起点开始,尝试寻找通往终点的路径。 **2. 计算方向坐标** 根据当前位置坐标 `(p.x, p.y)` 和预设的移动方向 `(move[p.k].x, move[p.k].y)` 来计算下一个可能的位置 `(dp_x, dp_y)`。 **3. ...

    函数递归走迷宫详解及代码

    "走迷宫3.txt", "走迷宫2.txt", 和 "走迷宫.txt" 可能包含了不同的迷宫布局,用于测试和练习编写好的算法。通过分析这些文本文件,我们可以实际运行程序,观察递归函数如何在不同迷宫中找到路径。 递归函数的基本...

    MFC 随机生成迷宫 动态实现有回溯地走出迷宫

    在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)框架来实现一个随机生成迷宫并采用非递归方式动态地有回溯地走出迷宫的程序。MFC是微软提供的一套C++库,它为Windows应用程序开发提供了丰富的...

    智能走迷宫的小车制作的基本过程

    ### 智能走迷宫小车制作的基本过程及关键技术 #### 一、引言 在智能机器人领域,智能走迷宫的小车是一项经典的研究课题。这类项目不仅考验设计者的编程能力和机械结构设计水平,还涉及到传感器技术、电机控制等多...

    java版走迷宫、源码

    在Java编程领域,走迷宫问题是一个经典的算法挑战,它涉及到路径查找和搜索策略。这个“java版走迷宫”项目提供了一种解决方案,对于初学者来说,它具有极高的学习价值,可以帮助深入理解Java语言以及算法应用。下面...

    深搜非递归电子老鼠走迷宫

    用非递归写的走迷宫,适合初学者使用,注释比较详细,欢迎下载

    Java课程设计走迷宫.zip_Java课程设计走迷宫_java课程设计_paymx9_迷宫 java_迷宫Java设计

    以下是关于"Java课程设计走迷宫"的主要知识点: 1. **基础语法与面向对象编程**:在Java中,编写迷宫游戏需要掌握基本的语法结构,如类、对象、方法、变量等。同时,要理解封装、继承和多态等面向对象特性,以便...

    走迷宫实现程序.rar

    走迷宫实现程序是一个基于C++的项目,旨在帮助学习者深入理解栈的数据结构以及C++界面编程的基本原理。在程序设计中,迷宫问题是一个经典的路径搜索问题,常常用于展示回溯法、深度优先搜索(DFS)或广度优先搜索...

    走迷宫代码

    走迷宫代码是一种常见的编程挑战,它涉及到搜索算法和图遍历。在这个场景中,"game.cpp" 可能是实现走迷宫算法的源代码文件,"game.exe" 是编译后的可执行程序,而 "1.map" 很可能是表示迷宫布局的地图文件。 在...

    老鼠走迷宫游戏

    《老鼠走迷宫游戏》是一款基于迷宫路径搜索算法的游戏,玩家可以操控老鼠在随机生成的迷宫中寻找出路,同时还要避开猫的追逐。在这个游戏中,深度优先搜索(DFS)算法被用来解决老鼠如何有效地在迷宫中移动。下面...

Global site tag (gtag.js) - Google Analytics