首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >确定土地是否被篱笆完全包围

确定土地是否被篱笆完全包围
EN

Code Golf用户
提问于 2014-01-02 14:12:32
回答 7查看 1.4K关注 0票数 22

想象一个二维的布尔值数组,0代表长方形土地上的草的正方形,1代表栅栏。

编写一个函数,该函数接受2D数组作为输入,并确定是否可以使用仅使用北/东/西/南移动从任何一个草区到任何其他草区的旅行,而不会碰到围栏。

如果数组中的任何区域被栅栏完全包围(意味着不能通过N/E/W/S来到达数组中的所有其他区域),则函数应该返回false;否则,它应该返回true。

下面是两个可以用作输入的示例数组,尽管您的函数不仅能够处理这些数组,还可以处理任意二维布尔值数组:

代码语言:javascript
运行
复制
0 0 0 0 0
0 1 0 0 0 
0 1 1 1 1
0 0 0 0 0
0 0 0 1 1

(should return true)

0 1 0 1 0
0 1 1 0 0
0 0 0 0 0
0 0 0 1 0
1 1 1 1 0 

(should return false, since the middle 0 in the top row is fully enclosed)

最短工作代码获胜。我会挑选获奖者后,要么一个星期已经过去,或没有新的提交在24小时内。

EN

回答 7

Code Golf用户

回答已采纳

发布于 2014-01-06 19:12:12

Matlab 45

代码语言:javascript
运行
复制
input('');c=bwconncomp(~ans,4);c.NumObjects<2
票数 1
EN

Code Golf用户

发布于 2014-01-02 14:40:56

APL (39)

代码语言:javascript
运行
复制
{∧/,⊃{⍺∨⊖⍵}/{⍵∨(∧\~⍵)∨⌽∧\⌽~⍵}¨s,⊖¨s←⊂⍵}

用法:

代码语言:javascript
运行
复制
      board1 board2
 0 0 0 0 0  0 1 0 1 0 
 0 1 0 0 0  0 1 1 0 0 
 0 1 1 1 1  0 0 0 0 0 
 0 0 0 0 0  0 0 0 1 0 
 0 0 0 1 1  1 1 1 1 0 
      {∧/,⊃{⍺∨⊖⍵}/{⍵∨(∧\~⍵)∨⌽∧\⌽~⍵}¨s,⊖¨s←⊂⍵} ¨ board1 board2
1 0
票数 8
EN

Code Golf用户

发布于 2014-01-02 20:53:56

Python (219个字节)

当然不是最短的,但这是我第一次尝试,所以我为此感到骄傲:

代码语言:javascript
运行
复制
def f(n):
 m=[int(c) for c in n if c!='\n']
 for i in range(len(m)):
  if m[i]<1:m[i]=2;break
 g(m,n.find('\n'),i);return not 0in m
def g(n,w,i):
 for x in i-w,i-1,i+1,i+w:
  if 0<=x<len(n):
   if n[x]<1:n[x]=2;g(n,w,x)

它的输入应该是0& 1s的字符串,其中行由换行符(\n)分隔。

示例用法:

代码语言:javascript
运行
复制
>>> f("00000\n01000\n01111\n00000\n00011")
True
>>> f("01010\n01100\n00000\n00010\n11110")
False
票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/17196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档