參考力扣資訊科技提供的演算法
題目
機械人在乙個無限大小的網格上行走,從點 (0, 0) 處開始出發,面向北方。該機械人可以接收以下三種型別的命令:
-2:向左轉 90 度
-1:向右轉 90 度
1 <= x <= 9:向前移動 x 個單位長度
在網格上有一些格仔被視為障礙物。
第 i 個障礙物位於網格點 (obstacles[i][0], obstacles[i][1])
如果機械人試圖走到障礙物上方,那麼它將停留在障礙物的前乙個網格方塊上,但仍然可以繼續該路線的其餘部分。
返回從原點到機械人的最大歐式距離的平方。
效果圖
標頭檔案
cpp檔案#ifndef robotwalkform_h
#define robotwalkform_h
/* * 程式設計模擬程式設計機械人(c++實現)
* 簡單粗略的寫一下過程,以後酌情完善
*/#include #include #include const int grid_tick_count = 20;
const int dir_x = ;
const int dir_y = ;
class robotwalkform : public qwidget
;#endif // robotwalkform_h
#include "robotwalkform.h"
#include robotwalkform::robotwalkform(qwidget *parent) : qwidget(parent)
robotwalkform::~robotwalkform()
void robotwalkform::startwalking(const qvector&commands, const qvector> &obstacles)
void robotwalkform::nextstep()
else if(m_commands[m_curorderindex] == -2)
else
else}}
emit squareddistancechanged(m_dis);
update();
m_curorderindex++;
}void robotwalkform::paintevent(qpaintevent *event)
//繪製原點
if (m_curx != 0 || m_cury != 0)
//繪製機械人方向+位置
int rotate = 0;
if (1 == m_curdir)
rotate = 90;
else if (2 == m_curdir)
rotate = 180;
else if (3 == m_curdir)
rotate = 270;
qpointf robotpos = qpointf(m_curx * tickwidth, m_cury * tickwidth);
qpixmap robotpixmap = m_robotpixmap;
qmatrix matrix;
matrix.rotate(rotate);
robotpixmap = robotpixmap.transformed(matrix, qt::fasttransformation);
painter.drawpixmap(robotpos.x() - tickwidth / 2.0, -(robotpos.y() + tickwidth / 2.0), tickwidth, tickwidth, robotpixmap);
//繪製障礙物繪製
for (int i = 0; i < m_obstacles.count(); i++)
}
874 模擬行走機械人
機械人在乙個無限大小的網格上行走,從點 0,0 處開始出發,面向北方。該機械人可以接收以下三種型別的命令 在網格上有一些格仔被視為障礙物。第i個障礙物位於網格點 obstacles i 0 obstacles i 1 如果機械人試圖走到障礙物上方,那麼它將停留在障礙物的前乙個網格方塊上,但仍然可以繼...
lettcode 模擬行走機械人
機械人在乙個無限大小的網格上行走,從點 0,0 處開始出發,面向北方。該機械人可以接收以下三種型別的命令 2 向左轉 90 度 1 向右轉 90 度 1 x 9 向前移動 x 個單位長度在網格上有一些格仔被視為障礙物。第 i 個障礙物位於網格點 obstacles i 0 obstacles i 1...
模擬行走機械人001
鏈結 機械人在乙個二維平面上行走,二維平面有障礙物,以座標形式給出。機械人可以左轉和右轉,前行3種狀態。求給定機械人行動動作陣列,完成過程中的最大歐氏距離?二維陣列 貪心?每次乙個動作完成之後,進行最大值更新 使用map和set進行障礙物的初始化!根據map中的第乙個橫座標,把該橫座標對應的所有縱座...