楼主: jiongjiongyoush
跳转到指定楼层
上一主题 下一主题
收起左侧

狗家昂赛特

🔗
zzgzzm 2016-10-26 12:28:41 | 只看该作者
全局:
jiongjiongyoush 发表于 2016-10-26 11:48
findEmptyNeighbor 没有return true的情况==感觉把棋盘改了不太好
看来很精通围棋啊!棋盘大小都知道 ...

哦,应该在Line 8 and Line 9之间加上 “if (board[i][j] == 0) return true;” (空位找到).  感谢指出!

这个围棋的算法其实只是“静态”的检查(无法知道下棋的时间顺序)也就是对当前棋子并不做validation。例如:
XXXXXXXXX
XOOOOOX
XOXOXOX
XOOOOOX
XXXXXXXXX
按照算法会认为连成一片的"O" 都是死棋,但在围棋实际中是不可能走到这一步了,因为"O"有至少2个“内眼”,这在围棋中是永活的好棋,因为“X”不可能同时活着占领多个"O"的“内眼”。

补充内容 (2016-10-26 12:32):
应该是board [ \i ] [ j ] == 0. [\i] 被自动认为是斜体的格式化了。
回复

使用道具 举报

🔗
zzgzzm 2016-10-26 12:39:54 | 只看该作者
全局:
画三角形:LZ贴的图很直观!我估计应该是这个意思:假设给定一个类似于“void drawLine(const Pt& p1, const Pt& p2)”的API,我也是用的recursion.
  1. typedef pair<double,double> Pt;
  2. typedef vector<Pt> Tri;
  3. typedef vector<Tri> Tris;

  4. // assumed given API
  5. void drawLine(const Pt& p1, const Pt& p2);

  6. // utility function to draw a given triangle
  7. void drawTri(const Tri& tri) {
  8.   for (int i = 0; i < 3; i++) drawLine(tri[i%3], tri[(i+1)%3]);
  9. }

  10. // dfs routine to draw central triangle and collect
  11. // 4 smaller triangles for each big trianlges
  12. Tris dfs(const Tris& tris) {
  13.   Tris res;   
  14.   for (const auto& t:tris) {
  15.     drawTri(t); Tri tri;
  16.     // construct and draw central triangle
  17.     for (int i = 0; i < 3; i++)
  18.       tri.push_back(Pt((t[i%3].first+t[(i+1)%3].first)/2.0,(t[i%3].second+t[(i+1)%3].second)/2.0));
  19.     drawTri(tri);
  20.     // collect all 4 smaller triangles into result
  21.     res.push_back(tri);   
  22.     for (int i = 0; i < 3; i++) {
  23.       res.push_back({t[i], res[0][i], res[0][(i+2)%3]});
  24.     }
  25.   }
  26.   return res;
  27. }

  28. // main function to draw triangles with given depth
  29. void drawTriangles(const Tri& tri, unsigned int depth) {
  30.   Tris tris = { tri };
  31.   while (depth-- > 0) tris = dfs(tris);
  32. }
复制代码
回复

使用道具 举报

🔗
huai10 2016-10-26 13:50:11 | 只看该作者
全局:
第一题当年写过一个围棋game, 就是数气
回复

使用道具 举报

🔗
huai10 2016-10-26 13:57:01 | 只看该作者
全局:
jiongjiongyoush 发表于 2016-10-26 11:09
输入三个顶点和depth
输出一堆点
问somehow,用这些点两两连线把depth的图画出来

最后一题dp吧
回复

使用道具 举报

🔗
 楼主| jiongjiongyoush 2016-10-26 22:16:10 | 只看该作者
全局:
zzgzzm 发表于 2016-10-26 12:39
画三角形:LZ贴的图很直观!我估计应该是这个意思:假设给定一个类似于“void drawLine(const Pt& p1, cons ...

思路是对的。。具体没细看
图是照抄三哥的==
回复

使用道具 举报

🔗
海盗包子 2016-10-27 02:56:35 | 只看该作者
全局:
请问下楼主第三轮第一题,如果要删除的节点有孩子,那么孩子怎么处理?是把左右孩子作为新的root加入要返回tree的集合吗?
回复

使用道具 举报

🔗
 楼主| jiongjiongyoush 2016-10-27 03:04:21 | 只看该作者
全局:
海盗包子 发表于 2016-10-27 02:56
请问下楼主第三轮第一题,如果要删除的节点有孩子,那么孩子怎么处理?是把左右孩子作为新的root加入要返回 ...

对,返回一堆tree
回复

使用道具 举报

🔗
海盗包子 2016-10-27 03:45:36 | 只看该作者
全局:
画三角形那道题可不可以理解为level order traversal 的变种,bfs那种的。据我观察,每加深一层,就是把一个当前的三角形分成三个三角形(中间的倒三角形不算,这样画出的边也没有重合)写了一下代码,constructor没有详写
  1. public class Point {
  2.         int x, y;
  3.         public Point() {}
  4. }
  5. public class Triangle {
  6.         Point A, B, C;
  7.         public Triangle(Point A, Point B, Point C){}
  8. }
  9. public Point getMid(Point A, Point B) {
  10.         int x = (A.x + B.x) / 2, y = (A.y + B.y) / 2; //不考虑double的情况
  11.         return new Point(x, y);
  12. }

  13. public void drawLine(Point A, Point B) {}
  14. public void drawTri(Triangle tri) {
  15.         drawLine(tri.A, tri.B);
  16.         drawLine(tri.B, tri.C);
  17.         drawLine(tri.A, tri.C);
  18. }
  19. public void drawGraph(Point A, Point B, Point C, int depth) {
  20.         Triangle basic = new Triangle(A, B, C);
  21.         Queue<Triangle> q = new LinkedList<Triangle>();
  22.         q.offer(basic);
  23.         for(int i = 0; i < depth; i++) {
  24.                 int size = q.size();
  25.                 for(int j = 0; j < size; j++) {
  26.                         basic = q.poll();
  27.                         Point mid_AB = getMid(basic.A, basic.B);
  28.                         Point mid_AC = getMid(basic.A, basic.C);
  29.                         Point mid_BC = getMid(basic.B, basic.C);
  30.                         q.offer(new Triangle(basic.A, mid_AC, mid_AB));
  31.                         q.offer(new Triangle(basic.B, mid_BC, mid_AB));
  32.                         q.offer(new Triangle(basic.C, mid_BC, mid_AC));
  33.                 }
  34.         }
  35.         while(!q.isEmpty()) {
  36.                 drawTri(q.poll());
  37.         }
  38. }
复制代码
回复

使用道具 举报

🔗
laiguojiuhao 2016-10-27 04:07:05 | 只看该作者
全局:

你啥时候面啊?最近老在面经看到你
回复

使用道具 举报

🔗
chestnut9919 2016-10-27 05:06:32 | 只看该作者
全局:
laiguojiuhao 发表于 2016-10-27 04:07
你啥时候面啊?最近老在面经看到你

这周五~~~
回复

使用道具 举报

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

本版积分规则

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