⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connectedsubgraphfinder.cpp

📁 在Linux下做的QuadTree的程序
💻 CPP
字号:
/********************************************************************** * $Id: ConnectedSubgraphFinder.cpp 1820 2006-09-06 16:54:23Z mloskot $ * * GEOS - Geometry Engine Open Source * http://geos.refractions.net * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation.  * See the COPYING file for more information. * **********************************************************************/#include <geos/planargraph/algorithm/ConnectedSubgraphFinder.h>#include <geos/planargraph/Subgraph.h>#include <geos/planargraph/Edge.h>#include <geos/planargraph/Node.h>#include <geos/planargraph/DirectedEdge.h>#include <geos/planargraph/DirectedEdgeStar.h>#include <vector>#include <stack>using namespace std;namespace geos {namespace planargraph {namespace algorithm {voidConnectedSubgraphFinder::getConnectedSubgraphs(vector<Subgraph *>& subgraphs){	GraphComponent::setVisitedMap(graph.nodeBegin(),			graph.nodeEnd(), false);	for (PlanarGraph::EdgeIterator			it=graph.edgeBegin(),			itEnd=graph.edgeEnd();			it!=itEnd; ++it)	{		Edge *e = *it;		Node *node = e->getDirEdge(0)->getFromNode();		if (! node->isVisited()) {			subgraphs.push_back(findSubgraph(node));		}	} }/*private*/Subgraph* ConnectedSubgraphFinder::findSubgraph(Node* node){	Subgraph* subgraph = new Subgraph(graph);	addReachable(node, subgraph);	return subgraph;}/*private*/voidConnectedSubgraphFinder::addReachable(Node* startNode,		Subgraph* subgraph){	stack<Node *> nodeStack;	nodeStack.push(startNode);	while ( !nodeStack.empty() )	{		Node* node = nodeStack.top();		nodeStack.pop();		addEdges(node, nodeStack, subgraph);	}}/*private*/voidConnectedSubgraphFinder::addEdges(Node* node,		stack<Node *>& nodeStack, Subgraph* subgraph){	node->setVisited(true);	DirectedEdgeStar *des=node->getOutEdges();	for (DirectedEdge::Vect::iterator i=des->begin(), iEnd=des->end();			i!=iEnd; ++i)	{		DirectedEdge *de=*i;		subgraph->add(de->getEdge());		Node *toNode = de->getToNode();		if ( ! toNode->isVisited() ) nodeStack.push(toNode);	}}} // namespace geos.planargraph.algorithm} // namespace geos.planargraph } // namespace geos /********************************************************************** * $Log$ * Revision 1.5  2006/03/21 21:42:54  strk * planargraph.h header split, planargraph:: classes renamed to match JTS symbols * **********************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -