查看: 2023| 回复: 11
跳转到指定楼层
上一主题 下一主题
收起左侧

[二分/排序/搜索] 面试题.... 不会写,求指教

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
一个2d array里面,给起点和终点,
1是墙,0是房间,返回是否能够经过所有房间之下到达终点。

起初思路是写DFS,但写了一下卡住了不会写,求大神解答,可以给大米! !谢谢!!

example:
101111
100011
000011
000001

start is 0,0

end is 3,5

return True

上一篇:Leetcode 最新题库公司分类2018.10.24整理
下一篇:在职转行leetcode集中刷题记录帖
推荐
cwtvincent 2018-10-29 05:13:02 | 只看该作者
全局:
用C++試著寫了一個暴力解法
不過複製vector會花掉很多時間
求大神改良

思路是DFS+concurrency
把走過的路變成1存在新地圖傳下去
比較0的數目與走的步數是否相等

  1. void m(vector<bool>& maze, int cx, int cy, int edx, int edy, int xlen, int ylen, int& path, int& t, bool &ret){
  2.     vector<bool> nmaze = maze;
  3.     if(!ret)
  4.         if(cx == edx && cy == edy && path == t) ret = true;
  5.         else{
  6.             ++path;
  7.             nmaze[cx*ylen+cy] = 1;
  8.             if(cx-1 != -1   && !maze[(cx-1)*ylen+cy]) m(nmaze, cx-1, cy  , edx, edy, xlen, ylen, path,t, ret);
  9.             if(cx+1 != xlen && !maze[(cx+1)*ylen+cy]) m(nmaze, cx+1, cy  , edx, edy, xlen, ylen, path,t, ret);
  10.             if(cy-1 != -1   && !maze[(cx)*ylen+cy-1]) m(nmaze, cx  , cy-1, edx, edy, xlen, ylen, path,t, ret);
  11.             if(cy+1 != ylen && !maze[(cx)*ylen+cy+1]) m(nmaze, cx  , cy+1, edx, edy, xlen, ylen, path,t, ret);
  12.         }
  13. }
  14. int main()
  15. {
  16.     int xlen, ylen, i, j, stx, sty, edx, edy, path = 0, total = 0;
  17.     vector<bool> maze;
  18.     bool tmp, ret = false;

  19.     cin >> xlen;
  20.     cin >> ylen;
  21.     for(i = 0; i != xlen; ++i){
  22.         for(j = 0; j != ylen; ++j){
  23.             cin >> tmp;
  24.             if(!tmp) ++total;
  25.             maze.push_back(tmp);
  26.         }
  27.     }
  28.     cin >> stx;
  29.     cin >> sty;
  30.     cin >> edx;
  31.     cin >> edy;
  32.     m(maze, stx, sty, edx, edy, xlen, ylen, path, total, ret);
  33.     if(ret) cout << "true";
  34.     else cout << "false";
  35. }
复制代码
回复

使用道具 举报

推荐
 楼主| kasumijay 2018-10-28 13:07:26 | 只看该作者
全局:
T大农民伯伯 发表于 2018-10-26 11:04
题目描述不清楚,允不允许一个格子踩多遍,允许的话找要求所有的格子在一个连通块里。不允许的话感觉是个超 ...

不允许的,所以感觉union find不能用
回复

使用道具 举报

全局:
2d array大小限制有阀?

这种差不多就是一路dfs走到底了。。 如果n不算太大 stack space没毛病就行。

但是如果n很大的话这个你就不好说了。。
回复

使用道具 举报

🔗
nlackx 2018-10-26 00:59:20 来自APP | 只看该作者
全局:
你这个例子从墙开始…
回复

使用道具 举报

🔗
 楼主| kasumijay 2018-10-26 01:15:36 | 只看该作者
全局:
nlackx 发表于 2018-10-26 00:59
你这个例子从墙开始…

那我換成:
301111
100011
000011
000005

我自己寫了個dfs,但tle了....
回复

使用道具 举报

🔗
xuantao427 2018-10-26 04:38:44 | 只看该作者
全局:
先 check start 和 end, 两者都必须是0, 否则false
然后Union find, 所有房间(0) 都必须在一个group里, 否则false

评分

参与人数 1大米 +3 收起 理由
kasumijay + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
题目描述不清楚,允不允许一个格子踩多遍,允许的话找要求所有的格子在一个连通块里。不允许的话感觉是个超难的问题。

评分

参与人数 1大米 +3 收起 理由
kasumijay + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
donezio 2018-10-28 13:55:23 | 只看该作者
全局:
这是在求Hamiltonian path 么。。。。貌似是np complete。。。
回复

使用道具 举报

全局:
不允许的话我能想到的应用场景应该是谷歌经典的扫地机器人了,为了扫地效率不走回头路。
回复

使用道具 举报

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

本版积分规则

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