取一个2D空间区域,该区域划分为以轴对齐的单位正方形元素,其中心以整数间隔对齐。如果一条边由两个元素共享,则称该边为内部,否则为外部边。
您的目标是找到从每个元素的中心开始(即traversal distance
或distance
简称为)到达外部边缘必须经过的最小数量的相邻元素。您只能穿过一条边缘(即没有切角/对角运动)。注意,“外部元素”(具有至少一个外部边缘的元素)被认为需要遍历0
相邻元素才能到达外部边缘。
输入值
输入是一个非负整数对坐标的列表,表示所有元素中心的(x,y)。假定不存在重叠元素(即x / y对唯一标识一个元素)。您可能不假定有关元素输入顺序的任何信息。
欢迎您将输入的原点转换到任何位置(例如0,0或1,1,等等)。
您可以假定所有输入元素都已连接,或者换句话说,可以使用上述规则从任何一个元素移动到任何其他元素。注意,这并不意味着2D区域只是简单连接。里面可能有孔。
示例:以下为无效输入。
0,0
2,0
不需要错误检查。
输入可以来自任何来源(文件,stdio,函数参数等)
输出量
输出应该是标识每个元素的坐标列表,并遍历相应的整数距离以到达边缘。输出可以按所需的任何元素顺序进行(例如,您不必按与输入相同的顺序输出元素)。
输出可以是任何源(文件,stdio,函数返回值等)
任何与元素的坐标与其外部距离匹配的输出都可以,例如,所有这些都可以:
x,y: distance
...
[((x,y), distance), ...]
[(x,y,distance), ...]
例子
文本示例输入的格式为x,y
,每行一个元素;欢迎您将其重塑为方便的输入格式(请参阅输入格式规则)。
文本示例输出的格式为x,y: distance
,每行一个元素;同样,欢迎您将其重塑为方便的输出格式(请参见输出格式规则)。
图形数字的左下边界为(0,0),内部数字表示到达外部边缘的预期最小距离。请注意,这些数字仅用于演示目的;您的程序不需要输出这些。
例子1
输入:
1,0
3,0
0,1
1,2
1,1
2,1
4,3
3,1
2,2
2,3
3,2
3,3
输出:
1,0: 0
3,0: 0
0,1: 0
1,2: 0
1,1: 1
2,1: 0
4,3: 0
3,1: 0
2,2: 1
2,3: 0
3,2: 0
3,3: 0
图示:
例子2
输入:
4,0
1,1
3,1
4,1
5,1
6,1
0,2
1,2
2,2
3,2
4,2
5,2
6,2
7,2
1,3
2,3
3,3
4,3
5,3
6,3
7,3
8,3
2,4
3,4
4,4
5,4
6,4
3,5
4,5
5,5
输出:
4,0: 0
1,1: 0
3,1: 0
4,1: 1
5,1: 0
6,1: 0
0,2: 0
1,2: 1
2,2: 0
3,2: 1
4,2: 2
5,2: 1
6,2: 1
7,2: 0
1,3: 0
2,3: 1
3,3: 2
4,3: 2
5,3: 2
6,3: 1
7,3: 0
8,3: 0
2,4: 0
3,4: 1
4,4: 1
5,4: 1
6,4: 0
3,5: 0
4,5: 0
5,5: 0
图示:
例子3
输入:
4,0
4,1
1,2
3,2
4,2
5,2
6,2
8,2
0,3
1,3
2,3
3,3
4,3
5,3
6,3
7,3
8,3
9,3
1,4
2,4
3,4
4,4
5,4
6,4
7,4
8,4
9,4
2,5
3,5
4,5
5,5
6,5
9,5
10,5
11,5
3,6
4,6
5,6
9,6
10,6
11,6
6,7
7,7
8,7
9,7
10,7
11,7
输出:
4,0: 0
4,1: 0
1,2: 0
3,2: 0
4,2: 1
5,2: 0
6,2: 0
8,2: 0
0,3: 0
1,3: 1
2,3: 0
3,3: 1
4,3: 2
5,3: 1
6,3: 1
7,3: 0
8,3: 1
9,3: 0
1,4: 0
2,4: 1
3,4: 2
4,4: 2
5,4: 2
6,4: 1
7,4: 0
8,4: 0
9,4: 0
2,5: 0
3,5: 1
4,5: 1
5,5: 1
6,5: 0
9,5: 0
10,5: 0
11,5: 0
3,6: 0
4,6: 0
5,6: 0
9,6: 0
10,6: 1
11,6: 0
6,7: 0
7,7: 0
8,7: 0
9,7: 0
10,7: 0
11,7: 0
图示:
计分
这是代码高尔夫。以字节为单位的最短代码获胜。有标准漏洞。允许使用除专门设计用来解决此问题的内置程序以外的任何内置程序。