Thoughtworks笔试作业

本文记录了作者在Thoughtworks笔试中遇到的计算机生成迷宫问题,通过创建maze类并使用矩阵表示网格,实现了从道路网格到渲染网格的转换。讨论了构造函数、create函数、setmazetext和getmazetext的功能,并提出了优化思路,如减少内存占用和简化操作。同时,提出了迷宫渲染字符串的输出要求以及输入有效性的检查规则。
摘要由CSDN通过智能技术生成

大概一个月前做了一下Thoughtworks的提前批作业--计算机生成迷宫,但是一直没来得及整理下,今天正好想起来就简要写一写,留作纪念。若有大神的话,希望能帮我看一下,如何做才能提升,或者这个思考的问题还有那些不全面的地方,万分感谢!

题目的话,这里在文章末尾会作说明。

对于这个问题,我选择建了一个maze类,用矩阵元素表示其网格属性,包含成员变量mazetext(最终需要输出渲染字符串),宽和高,成员函数有:构造函数,creat(string &command)函数,setmazetext(int **matrix)函数以及 getmazetext()函数。

其中:

(1)构造函数之前是先将maze初始化为2*2的非连通道路网格,即高宽均为2,渲染字符串赋值"[W] [W] [W] [W] [W]\n[W] [R] [W] [R] [W]\n[W] [W] [W] [W] [W]\n[W] [R] [W] [R] [W]\n[W] [W] [W] [W] [W]\n"; 但现在看来这部分有点占内存,可直接设为空。

(2)create(string &command)通过字符串command进行网格矩阵设置,主要过程:字符串分割获取数据,根据大小初始化道路网格,根据command第二行内容连通各数据网格。对于这些过程处理,第一部分字符串分割获取数据我采用了两个vector进行处理,其实可以直接采用一个函数,在函数中判断是否为数字,是否超出实际范围,这样就可以减少一个vector占用的内存;第二部分与第三部分的操作其实也是可以合并的,都是在处理连通问题,没必要分两次,在这里分析的就只是相邻单元格,那么就是横纵坐标有一个相等一个差二,判断连通,则可行则将其中间元素(如x同y异,则为x,(y1+y2)/2)设为1,而我之前做的判断了四种情况,繁琐不够简洁。

(3)setmazetext(int **matrix)则是根据矩阵元素值对渲染字符串mazetext进行加不同字符串。

(4)getmazetext()返回渲染字符串。
具体程序代码如下(Qt5.6.1 MinGW 32bit,C++),欢迎批评指正~~~

#ifndef MAZE_H
#define MAZE_H
#include<string.h>
#include<vector>
#include<sstream>
#include<cmath>
using namespace std;
#define MAX 100000000
//string split function(seperator " ") to get info enter from keyboard
void SplitString(const string &s,vector<string> &v,const string&c)
{
 
    string::size_type pos1,pos2;
    pos2=s.find(c);
    pos1=0;
    while(string::npos!=pos2)
    {
 
        v.push_back(s.substr(pos1,pos2-pos1));
        pos1=pos2+c.size();
        pos2=s.find(c,pos1);
    }
    if(pos1!=s.length())
        v.push_back(s.substr(pos1));
}
bool isnum(string s)
{
 
    stringstream sin(s);
    int t;char p;
    if(!(sin>>t)) return false;
    if(sin>>p) return false;
    else
        return true;
}
class maz
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值