嗨!我有一个有趣的问题。
我在HTML画布中绘制了一系列六边形(忽略点)
对于每个六边形,我都有它的中心的x和y坐标,这就是我识别它们的方式。
我将六边形存储在一个名为六边形的数组中,我存储六边形
function Hexagon()
{
this.shape
this.x
this.y
}
我有一个函数返回一个对象,该对象包含给定六边形的所有相邻六边形
function get_adjacent_hexagons(hexagon)
{
var x = hexagon.x
var y = hexagon.y
var adjacents = []
for(var i=0; i<editor_hexagons.length; i++)
{
if(editor_hexagons[i].x === x && editor_hexagons[i].y == y - (2*s))
{
adjacents.push(editor_hexagons[i])
}
if(editor_hexagons[i].x === x && editor_hexagons[i].y == y + (2*s))
{
adjacents.push(editor_hexagons[i])
}
if(editor_hexagons[i].x === x - (s*1.5) && editor_hexagons[i].y == y - s)
{
adjacents.push(editor_hexagons[i])
}
if(editor_hexagons[i].x === x - (s*1.5) && editor_hexagons[i].y == y + s)
{
adjacents.push(editor_hexagons[i])
}
if(editor_hexagons[i].x === x + (s*1.5) && editor_hexagons[i].y == y - s)
{
adjacents.push(editor_hexagons[i])
}
if(editor_hexagons[i].x === x + (s*1.5) && editor_hexagons[i].y == y + s)
{
adjacents.push(editor_hexagons[i])
}
}
return adjacents
}
根据这些信息,是否可以制作算法来检查所有六边形是否已连接
那就是如果自己没有六边形或六边形组?
例如,在提供的图片中,它们都已连接。
-----编辑-----
这似乎有效
function check_connection()
{
visited = []
visit_hexagon(hexagons[0])
}
function visit_hexagon(hexagon)
{
var not_visited = true
for(var i=0; i<visited.length; i++)
{
if(visited[i] === hexagon)
{
not_visited = false
break
}
}
if(not_visited)
{
visited.push(hexagon)
var adjacents = get_adjacent_hexagons(hexagon)
for(var i=0; i<adjacents.length; i++)
{
visit_hexagon(adjacents[i])
}
}
}
答案 0 :(得分:1)
是。由于您可以找到相邻的六边形,因此可以在地图上创建所有六边形的图形。然后,您可以简单地从图中的单个节点开始执行广度优先搜索,然后检查在搜索结束后是否找到所有节点。有关详细信息,请参阅:https://en.wikipedia.org/wiki/Connectivity_(graph_theory)#Computational_aspects
答案 1 :(得分:1)