你的位置:首页 > 软件开发 > ASP.net > x01.Weiqi.11: 神来之笔

x01.Weiqi.11: 神来之笔

发布时间:2015-06-01 00:01:13
在围棋中,一子两用,可谓妙手,而一子三用,则可称之为神来之笔。在解决征子问题时,一不小心,也来了个神来之笔,其代码如下: // 征子判断,p1, p2 为气,p2 为前进方向,p 为逃跑之子。 bool CanLevy(Pos p1, Pos p2, Pos p, b ...

x01.Weiqi.11: 神来之笔

在围棋中,一子两用,可谓妙手,而一子三用,则可称之为神来之笔。在解决征子问题时,一不小心,也来了个神来之笔,其代码如下:

    // 征子判断,p1, p2 为气,p2 为前进方向,p 为逃跑之子。    bool CanLevy(Pos p1, Pos p2, Pos p, bool isBlack = true)    {      if (!IsCusp(p1, p2)) return true;      if (p == m_InvalidPos) return true;      List<Pos> selfPoses = isBlack ? BlackPoses : WhitePoses;      List<Pos> otherPoses = !isBlack ? BlackPoses : WhitePoses;      // 征而被叫,岂不大笑?      var p1_links = LinkPoses(p1).Intersect(otherPoses).ToList();      if (p1_links.Count == 1 && p1_links.Intersect(EmptyPoses).Count() == 2)        return false;      var p2_links = LinkPoses(p2).Intersect(otherPoses).ToList();      if (p2_links.Count == 1 && p2_links.Intersect(EmptyPoses).Count() == 2)        return false;      int count = 0;      while (true) {        if (!InRange(p2.Row, p2.Col))          break;        bool isRow = p2.Row - p.Row == 0 ? true : false;        int rowOffset = isRow ? (count == 0 ? p1.Row - p2.Row : p2.Row - p1.Row) : 0;        int colOffset = isRow ? 0 : (count == 0 ? p1.Col - p2.Col :p2.Col - p1.Col);        Pos pos = new Pos(p2.Row + rowOffset, p2.Col + colOffset);        var rounds = count < 5 ? LinkPoses(pos) : RoundTwoPoses(pos);        foreach (var r in rounds) {          if (isBlack && count < 2) continue; // 黑需先走两步          if (selfPoses.Contains(r))            return false;          if (otherPoses.Contains(r)) {            return true;          }        }        count++;        p1 = p;        p = p2;        p2 = pos;      }      return true;    }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:x01.Weiqi.11: 神来之笔

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录