Я пытаюсь использовать алгоритм flood fill , чтобы найти все похожие смежные объекты в списке, чтобы пометить их для удаления. Я пытался адаптировать псевдокод в Википедии, но застрял.
Каждый объект в списке имеет значение int X, значение int Y, имя и логическое значение для пометки для удаления. Я хочу сопоставить имя.
Программа зависает без try-catch и просто выходит с ним. Это не возвращает сообщение об ошибке. Вот то, что я имею до сих пор, пытаясь найти любые объекты прямо выше.
//Find neighbouring bubbles
gameGrid.DetectNeighbours2(gameGrid.planets.Last(), gameGrid.planets.Last().name);
//Flood fill algorithm to detect all connected planets
internal void DetectNeighbours(Planet p, Planet.Name planetName)
{
try
{
if (p.planet != planetName)
return;
p.deletable = true;
DetectNeighbours(GetTopNode(p), planetName);
}
catch (Exception err)
{
Debug.WriteLine(err.Message);
}
}
internal Planet GetTopNode(Planet b)
{
foreach (Planet gridPlanet in planets)
{
if (gridPlanet .Y == b.Y - 50)
return gridPlanet ;
}
return b; //Don't think this is right, but couldn't think of alternative
}