C++超迷你迷宫

#include <iostream>
#include <stack>
using namespace std;
#define _SIZE_ 10
typedef int Array[_SIZE_][_SIZE_];

struct Pos
{
    int x;
    int y;
    Pos(){}
    Pos(int val1,int val2):x(val1),y(val2){}
};//记录位置x,y,相当于记录的相应位置坐标。
struct Man
{
    Pos pos;
};

class Maze
{
    public:
Maze(int a[][_SIZE_])
    {
        for(int i=0;i<_SIZE_;i++)
        {
            for(int j=0;j<_SIZE_;j++)
            {
                arr[i][j] = a[i][j];
            }
        }
  }

void Printf()
    {
        for(int i=0;i<_SIZE_;i++)
        {
            for(int j=0;j<_SIZE_;j++)
            {
                cout<<arr[i][j]<<" ";
            }
            cout<<endl;
        }
    }   

 void InitGrial(const Pos &start,const Pos &end)
    {
        Man man;
        man.pos.x = start.x;
        man.pos.y = start.y;
    //  man.kind = RIGHT;
        stack<Man> st;
        stack<Man> sh;
        st.push(man);//此处才把起始位置放进栈st里面。
        Postion(man);//记住man走过的足迹.
        while(!st.empty())
        {
            Pos NewPos;
            Man man = st.top();
            if (InitNewPos(NewPos,man))
            {
            Man NewMan;
            NewMan.pos = NewPos;
            st.push(NewMan);
            Postion(NewMan);
            if(NewMan.pos.x==end.x && NewMan.pos.y==end.y)break;
            }
            else
            {
                sh.push(st.top());
                st.pop();
            }
        }
        while(!sh.empty())
        {
            Man man = sh.top();
            arr[man.pos.x][man.pos.y]=0;
            sh.pop();
        }
    }
    bool InitNewPos(Pos &pos,Man &man)
    {
        if(arr[man.pos.x][man.pos.y+1]==0)
             {
                pos.x=man.pos.x;
                pos.y=man.pos.y+1;
                return true;
             }
        if(arr[man.pos.x+1][man.pos.y]==0)
            {
            pos.x=man.pos.x+1;
            pos.y=man.pos.y;
            return true;
            }
        if(arr[man.pos.x][man.pos.y-1]==0)
            {
            pos.y = man.pos.y-1;
            pos.x = man.pos.x;
            return true;
            }
        if(arr[man.pos.x-1][man.pos.y]==0)
            {
            pos.x = man.pos.x-1;
            pos.y = man.pos.y;
            return true;
            }
        return false;
    }
    void Postion(Man &man)
    {
        arr[man.pos.x][man.pos.y]=2;
    }
    private:
    Array arr;
};

int main()
{
    int a[][10]=
            {1,0,1,1,1,1,1,1,1,1,
             1,0,0,0,0,0,1,1,0,1,
             1,0,1,1,1,0,0,1,0,1,
             1,0,0,1,1,1,0,0,0,1,
             1,1,0,1,1,1,1,0,0,1,
             1,1,0,1,1,1,1,1,1,1,
             1,1,0,1,1,1,1,1,1,1,
             1,1,0,0,0,0,1,1,1,1,
             1,1,1,1,1,0,0,0,1,1,
       1,1,1,1,1,1,1,0,1,1};
    Maze ma(a);
    Pos start(0,1);
    Pos end(9,7);//定义开始的位置以及结束的位置。

    ma.InitGrial(start,end);
 //然我们开始吧,实在想不出名字了,Grial是圣杯的意思.

    ma.Printf();
    return 0;
}
时间: 2024-08-07 12:22:00

C++超迷你迷宫的相关文章

PHP+redis实现超迷你全文检索

2014年10月31日 11:45:39 情景: 我们平台有好多游戏, 运营的同事在查询某一款游戏的时候, 目前使用的是html的select下拉列表的展现形式, 运营的同事得一个个去找,然后选中,耗时又费眼 效果: 输入"三国"或者"国三", 将自动列出所有包含"三国"的游戏名字, 输入不限顺序; 例如输入"杀三国",仍然会将"三国杀"这款游戏找出来 实现: 我用redis的集合+PHP的array_in

2015/5/9站立会议(补发)

会议内容: 本次会议主要是解决其余两人尚未完成自己的任务,而我们两人已经完成了自己的任务,面对进度不一致主要做出以下几点计划 完成任务的一人去协助开发,另一个人去为本游戏增添新想法. 后天开始协助哪两个模式,到周三晚上全部完成,这是又一个小冲刺,周三展示成果,周四做界面和各个模式集合到主程序,期间我和盼超绘制迷宫地图 .周五可在教室展示基本功能.

2015/5/14 站立会议(补发)

今日站立会议内容: 明天两个完成基本功能的模式把自己特色功能实现, 后天开始协助哪两个模式,到周三晚上全部完成,这是又一个小冲刺,周三展示成果,周四做界面和各个模式集合到主程序,期间我和盼超绘制迷宫地图 .周五可在教室展示基本功能.

西安华科云瘦客户机 简约时尚还低碳环保

西安华科云瘦客户机http://www.sharevdi.cn,联系方式:4006683769,可以靠脸吃饭,偏要靠才华.近日,一场创意婚礼受到广大网友的好评,结婚车队不讲究排场,没有豪车,新郎选择20辆“小黄车”作为“婚车”,用最低碳的方式迎娶自己美丽的新娘,不仅浪漫而且环保,更是为自己留下了难忘的记忆.这场用心的“低碳婚礼”,没有豪车,避免了污染:没有排场,减少了浪费:没有了豪华的排场,更是少了些许庸俗,这何尝不是一种幸福? 据悉,哥本哈根世界气候大会之后,“低碳”的概念如雨后春笋般兴盛起来

360wifi使用方法|360wifi使用教程

360随身WiFi是一款超迷你.操作极其简单的无线路由器,只需把360随身WiFi插到一台可以上网的电脑上,不用做任何设置,就把连接有线网络的电脑转变成接入点,实现与其他终端的网络共享.简单方便实现手机WIFI上网.1.是否支持台式机: 台式机也是可以支持的,但Linux.Win2003和Mac os系统目前不支持2.支持的操作系统: 支持操作系统:Windows XP.Window Vista 32/64. Windows 7 32/64.Win8.win8.13.设备是否有辐射: 无线设备均

360随身wifi怎样购买?360随身wifi怎样预约?

---恢复内容开始--- 360随身wifi怎样购买 想要购买360随身Wifi,可以登录360随身Wifi的官网wifi.360.cn,或者直接登陆京东商城进行购买,售价为19.9元,分黑.白两色. 针对360随身Wifi怎样购买的问题,只要登陆官网或者京东商城即可购买.360随身Wifi是360公司近期推出的一款硬件产品.这款产品的作用就是在没有在没有WiFi的环境下,但电脑可以通过有线上网的时候,把"360随身WiFi"连接到电脑,不用做任何设置即可利用电脑的有线网络发射无线Wi

西安华科云终端 玩转酒店数码客房

西安华科云终端http://www.sharevdi.cn,联系方式:4006683769,带你玩转酒店数码客房.在信息化蓬勃发展的今日,人们的日常生活与网络.信息结合的越来越紧密,频繁的商旅活动更是将酒店等服务行业推至高峰.面对屡屡发生酒店负面事件,酒店顶着巨大的舆论压力,力求将酒店管理服务做到最好.客房作为酒店组成的主体,是客人在酒店中停留时间最长的地方,是客人临时的“家”.如何将客房信息化做到极致,提供更便捷贴心的服务?成为了每个酒店决策者考量的重点.下面西安华科云终端分析解答下这个难题,

跑跑卡丁车单机版商品代码

注:此商品代码仅供参考或本地体验之用,如有侵权请邮件通知. 更新信息(不定期更新):商品代码已更新至[路战舰9][泰坦9][鲨鱼船长9] 小提示:可以使用浏览器的搜索功能来快速定位道具名称的位置. 1 = 皮蛋(金币)2 = 黑妞(金币)3 = 蓝色喷漆(金币)4 = 绿色喷漆(金币)5 = 青绿色喷漆(金币)6 = 紫色喷漆(金币)7 = 蓝色星星(金币)8 = 黄色星星(金币)9 = 绿色星星(金币)10 = 爆烈 C1(30天)11 = 合金 C1(30天)12 = 尖锋 C1(30天)1

c++学习书籍推荐《C++设计新思维》下载

百度云及其他网盘下载地址:点我 译序by 侯捷 i 译序by 於春景 iii 目录 v 序言by scott meyers xi 序言by john vlissides xv 前言 xvii 致谢 xxi 第一篇 技术(techniques) 1 第1章 基于policy的class设计(policy-based class design) 3 1.1 软件设计的多样性(multiplicity) 3 1.2 全功能型(do-it-all)接口的失败 4 1.3 多重继承(multiple in