谷歌面经

第五面:这一面理解题意花了大概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); }

 

posted @ 2018-01-31 11:32  jxr041100  阅读(207)  评论(0编辑  收藏  举报