다음과 같이 그래프를 검색하여 모든 꼭지점에 연결되어야하는 첫 번째 꼭지점에서 꼭지점에 도달 할 수 있는지 확인합니다. 연결되지 않은 부분이 없도록하기 위해이 작업을 수행합니다.연결이 끊어진 그래프 구성 요소를 효율적으로 감지합니까?
불행히도 매우 느립니다.
최적화를 위해 내가 할 수 있거나 저장할 수있는 것이 있습니까?
실제 그래프 라이브러리를 사용하지 않으므로 그래프와 생성 된 도시에 대해 배우고 싶습니다.
private void removeDisconnectedSquares()
{
for(int i = 0; i < getNumXNodes(); ++i)
{
for(int j = 0; j < getNumYNodes(); ++j)
{
//removeDisconnectedSquare(i, j);
visitedNodes.clear();
if(!isNodeReachableFrom(getNodeAt(i, j), getNodeAt(0, 0)))
{
removeVertex(i, j);
}
}
}
}
private boolean isNodeReachableFrom(GraphNode node, GraphNode target)
{
if(node == null)
{
return false;
}
if(visitedNodes.contains(node))
{
return false;
}
else
{
visitedNodes.add(node);
}
if(node == target)
{
return true;
}
if(node.contains(target))
{
return true;
}
for(int i = 0; i < node.getSize(); ++i)
{
if(isNodeReachableFrom(node.at(i), target))
{
return true;
}
}
return false;
}
이것은 [codereview] (http://codereview.stackexchange.com/) 이상으로 적합합니다. 아마도 거기에 물어보기를 시도해야합니다. – toniedzwiedz
나는 그가 그래프의 연결이 끊어진 구성 요소를 빨리 찾는 방법을 묻는 것이기 때문에 여기에 속한다고 말하고 싶습니다. – CrazyCasta
이 문장 ("그래프와 생성 된 도시에 대해 배우고 싶습니다. 그래서 실제 그래프 라이브러리를 사용하지 않습니다.")는 반 직관적입니다. 오픈 소스 그래프 라이브러리를 공부하면 그래프에 대해 더 많이 배우는 목표를 달성하는 좋은 방법이 될 것입니다. 예를 들어, 산업 강도 그래프 라이브러리의 출처가이 질문에 대답 할 가능성이 높습니다. – WeirdlyCheezy