谷歌面经

第五面:这一面理解题意花了大概20分钟时间,感觉面试官也觉得不太爽了,大概问题就是,给定一个机器人,然后机器人容许一些列操作, void clean() 清空当前单元格,turnLeft(k) turnRight(k) 向左转k次,向右转k次,move()从当前方向移动到下一个单元格,给定一个机器人,让机器人去清理整个房间,采用dfs的算法,关键是如何表示每个单元格,最后给出了正确的思路,然后写了下代码,然后我检查了一遍,没检查出bug,因为没有多少时间了,面试官也没有说什么,也没告诉我有bug,就让我检查一遍,走路上想起来了一个bug,在用Set去重的时候,忘记了调用set.add()方法,卧槽了,所以这个代码是有bug的,啊,要疯啊,要是因为这个挂了我就真的想死了

 

void turnLeft(int k);
void turnRight(int k);
void move();
void clean();

#0,1,2,3-->east,south,west,north.

void cleanHouse(vector<vector<int>>&room)
{
    int m = room.size();
    int n = room[0].size();
    int startX = 0;
    int startY = 0;
    vector<vector<bool>> visited(m, vector<bool>(n));
    dis(startX,startY,room, visited,0);
 }

void dis(int startX,int startY,vector<vector<int>>&room, vector<vector<bool>> visited, int dir)
{
      vector<vector<int>> dirs = {{1,0},{0,1},{-1,0},{0,-1}};
      pair<int,int>currDir = dirs[dir];
       visited[startX][startY] = true;
      while(startX+currDir.first>=0 && startX+currDir.first<m &&  startY+currDir.second >=0 && startY+currDir.second<n && room[startX+currDir.first][startX+currDir.second]!=2)
   {
        if(room[startX+currDir.first][startX+currDir.second]==1) 
{
clean(); room[startX
+currDir.first][startX+currDir.second] = 0; }
startX
+=currDir.first; startY+=currDir.second; move(); } startX = startX - currDir.first; startY = startY-currDir.second;
int k = rand()%4;
int nextDir = turnLeft(k); dfs(startX,startY,room,visited,nextDir);
k = rand()%4; nextDir
= turnRight(k); dfs(startX,startY,room,visited,nextDir); }

 

转载于:https://www.cnblogs.com/jxr041100/p/8391377.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值