📣 独立日限时特惠: VIP通行证立减$68
楼主: 不zhiwei何
跳转到指定楼层
上一主题 下一主题
收起左侧

谷歌电面跪经

 
🔗
xiaoquexing 2017-8-16 13:58:17 | 只看该作者
全局:
如果没有grid的信息,怎么知道哪里是障碍物,哪里是emtpy啊,
回复

使用道具 举报

🔗
reliveinfire 2017-8-16 14:04:42 | 只看该作者
全局:
我的想法是dfs traversal, 当从dfs离开, 要回到之前的点, 并且将robot的方向, 找到call dfs时的方向, 不知道各位觉得如何?

void robotClean(vector<vector<char>>& mm, Robot& r){
        vector<vector<int>> visited(mm.size(), vector<int>(mm[0].size()));
        int cr = -1, cl = -1;
        for (int i = 0 ; i < mm.size() ; i++){
                for (int j = 0 ; j < mm[0].size() ; j++){
                        if (mm[i][j] == '^'){
                                cr = i; cl = j;
                                break;
                        }
                }
                if (cr>=0 && cj >=0)
                        break;
        }
        dfs(r, cr, cl, visited, 0);
        return;
}

void dfs(Robot& r, int row, int col, vector<vector<int>>& visited, Direction dir)
{
        int dd[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};
        r.clean();
        visited[nr][nr] = 1;
        for (int i = 0 ; < 4 ; i++){
                if (i != 0){
                        r.TurnRight(1);
                        dir =  (dir + 1)%4;
                }
                int nr = row + dd[dir][0];
                int nl = col + dd[dir][1];
                if (!visited[nr][nl]){
                        if (r.move()){
                                dfs(r, nr, nl, visited, dir);
                        }
                }
        }
        r.TurnLeft(1);
        r.move();
        r.TurnRight(2);
        return;

}


补充内容 (2017-8-16 14:08):
假定一开始机器人是朝上

补充内容 (2017-8-16 14:23):
原来是不能输入 grid的 那这个方法不行了,

评分

参与人数 1大米 +3 收起 理由
terry012 + 3 感谢分享!

查看全部评分

回复

使用道具 举报

🔗
luckchaser 2017-8-17 03:48:52 | 只看该作者
全局:
赞楼主。 电面就是运气,有些Google电面题目不难,甚至leetcode原题。 加油
回复

使用道具 举报

🔗
luckchaser 2017-8-17 04:48:20 | 只看该作者
全局:
reliveinfire 发表于 2017-8-16 14:04
我的想法是dfs traversal, 当从dfs离开, 要回到之前的点, 并且将robot的方向, 找到call dfs时的方向, 不知 ...

感觉dfs()里,一直可以 call move() and clean() 打扫卫生直到robot either move to the next cell that has a block or the next cell is already cleaned, 在这两种情况下robot就要turnLeft and turnRight, 所以这里move()一次好像有问题

补充内容 (2017-8-17 04:49):
不过实在有点confused about turnLeft(k) and turnRight(k), 这个参数k啥意思 求解答
回复

使用道具 举报

🔗
hhfhfhhy1 2017-8-17 04:53:09 | 只看该作者
全局:
我有个疑问。如果一开始不知道机器人在哪的话。怎么做?
回复

使用道具 举报

🔗
 楼主| 不zhiwei何 2017-8-17 05:23:14 | 只看该作者
全局:
haifengc 发表于 2017-8-15 21:58
如果没有grid的信息,怎么知道哪里是障碍物,哪里是emtpy啊,

可以调用boolean Move()去让机器人试,true说明是empty并且机器人前进一格,false说明是障碍物并且机器人原地不动。
回复

使用道具 举报

🔗
 楼主| 不zhiwei何 2017-8-17 05:24:33 | 只看该作者
全局:
luckchaser 发表于 2017-8-16 12:48
感觉dfs()里,一直可以 call move() and clean() 打扫卫生直到robot either move to the next cell that  ...

turnRight(int k)是用来robot转身k次。比如,turnRight(2)就可以让机器人在原地向右转两次(180度)。
回复

使用道具 举报

🔗
luckchaser 2017-8-17 08:14:50 | 只看该作者
全局:
不zhiwei何 发表于 2017-8-17 05:24
turnRight(int k)是用来robot转身k次。比如,turnRight(2)就可以让机器人在原地向右转两次(180度)。

明白啦,谢谢解疑
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表