由于明天是5月4日,因此这里有一个以“星球大战”为主题的小贴士,可以让您从心理上做好应对明天来临的所有恶作剧的准备。
故事背景
在银河参议院会议期间,所有参议员都坐在n*n
网格中。JarJar流感的突然爆发(持续不断,并导致被感染者像JarJar Binks一样说话)导致某些参议员受到感染。
这是一个带有6*6
网格的示例,其中X
感染了参议员,对应的列表是[[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[0,5]]
::
之后,感染开始逐步传播。如果两个参议员共享网格上的整个边缘(即,上,下,右,左),则它们是相邻的,这意味着我们不包括对角线。
我们可以得出结论,一个参议员可以与2,3或4个其他参议员相邻,并声明以下感染规则:
- 被感染的参议员永远保持感染
- 如果某位参议员在上一步中与2位或更多位受感染的参议员相邻,则该步骤将被感染。
这是先前网格的示例,显示了感染的两个第一步:
在接下来的步骤之后,所有参议院将被感染
你的任务
您的代码不需要处理无效输入,例如列表大于n*n
或坐标不是唯一的。
您的代码将输入一对整数(或二进制网格或任何其他适合您的语言的格式)和一个整数n
(如果您使用除列表以外的其他格式,则不必要)的列表,例如:
8 [[1,2],[1,1],[7,4],[2,7],[4,3]]
n是网格的侧面,这意味着该网格将是一个* n网格,而整数对列表是最初感染的参议员的细胞的坐标。
网格的左下角是[0,0],右上角是[n-1,n-1]。左上角是[0,n-1]。
您的代码必须输出一个整数:
-1
或伪造的值或错误(如果整个网格永远不会被完全感染)或感染整个网格所需的最少步骤
测试用例
6 [[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[5,0]] => 7
4 [[1,1][0,3][1,0][3,0][3,3]] => 9
请记住,这是代码高尔夫,因此以字节为单位的最短答案为胜!
n
多少?有最大值吗?
CellularAutomaton
……