• 减谈迷宫C++


    今天老师让做了个迷宫问题,我一看到就发现和我之前写过的一个程序是一样 的,但是在后来编写的时候有一个地方搞错了,最后下课了我还是没有正确的编写好,然后今天回来之后自己有看了一下,现在已经解决了。

    #ifndef DIRECTION_H

    #define DIRECTION_H
    #include<iostream>
    using namespace std;
    struct node
    {
    int a;
    int b;
    };
    class Direction
    {
    public:
    Direction();
    ~Direction();
    void DFS(int n, int m);
    void udlr(int &n, int &m, int num);
    void durl(int &n, int &m, int num);
    void output();
    private:
    int **a;
    int **visit;
    node zxh[64];
    int count1;
    };
    Direction::Direction()
    {
    count1 = 0;
    a = new int*[8];
    visit = new int*[8];
    for (int i = 0; i<8; i++)
    {
    a[i] = new int[8];
    visit[i] = new int[8];
    }
    for (int i = 0; i<8; i++)
    {
    zxh[i].a = -1;
    zxh[i].b = -1;
    }
    int b[] = { 0, 0, 0, 0, 0, 0, 0, 0,
    0, 1, 1, 1, 1, 0, 1, 0,
    0, 0, 0, 0, 1, 0, 1, 0,
    0, 1, 0, 0, 0, 0, 1, 0,
    0, 1, 0, 1, 1, 0, 1, 0,
    0, 1, 0, 0, 1, 0, 0, 0,
    0, 1, 0, 0, 1, 0, 0, 0,
    0, 1, 1, 1, 1, 1, 1, 0 };
    for (int i = 0; i<8; i++)
    {
    for (int j = 0; j<8; j++)
    {
    a[i][j] = b[i * 8 + j];
    visit[i][j] = 0;
    }
    }
    }
    Direction::~Direction()
    {}
    void Direction::udlr(int &n, int &m, int num)
    {
    if (num == 1)
    n--;
    else if (num == 2)
    n++;
    else if (num == 3)
    m--;
    else
    m++;
    }//著名方向
    void Direction::durl(int &n, int &m, int num)
    {
    if (num == 1)
    n++;
    else if (num == 2)
    n--;
    else if (num == 3)
    m++;
    else
    m--;
    }//著名方向
    void Direction::output()
    {
    int num = 0;
    while (zxh[num].a != -1)
    {
    if (num % 7 == 0)
    cout << endl;
    cout << "(" << zxh[num].a << "," << zxh[num].b << ")"<<"  ";
    num++;
    }
    }
    void Direction::DFS(int n, int m)
    {
    if (n == 7 && m == 7)
    {
    output(); cout << endl; return;
    }
    else
    {
    for (int i = 1; i < 5; i++)
    {
    udlr(n, m, i);
    if (n >= 0 && n < 8 && m >= 0 && m < 8 && a[n][m] == 0)
    {
    zxh[count1].a = n;
    zxh[count1].b = m;
    count1++;
    a[n][m] = 1;
    DFS(n, m);
    a[n][m] = 0;
    count1--;
    zxh[count1].a = -1;
    zxh[count1].b = -1;
    }
    durl(n, m, i);
    }
    }
    }
    #endif
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    #include"Direction.h"
    #include<iostream>
    using namespace std;
    int main()
    {
    Direction z;
    z.DFS(0,0);
    return 0;
    }
  • 相关阅读:
    linux学习(六)计划任务命令
    如何在在手机上安装linux(ubuntu )关键词:Termux
    linux学习(五)用户与组管理命令,以及用户信息文件解释
    linux学习(四)复制(cp)移动(mv)删除(rm)查找(find)文件、文件夹操作、软硬链接的区别
    Flutter中通过https post Json接收Json
    Api管家系列(一):初探
    Api管家系列(三):测试和Rest Client
    Api管家系列(二):编辑和继承Class
    JDK8 时间相关API基本使用
    windows杀端口
  • 原文地址:https://www.cnblogs.com/zhangxinhua/p/8319262.html
Copyright © 2020-2023  润新知