Esempio n. 1
0
void printGraph(const Graph<NodeInfo> &graph, const vector<int> &path, const vector<int> &stations)
{
    GraphViewer *gv = new GraphViewer(600, 600, false);
    gv->createWindow(600, 600);
    gv->defineVertexColor("black");
    gv->defineEdgeColor("black");

    vector<Vertex<NodeInfo> *> vertexSet = graph.getVertexSet();
    for (size_t i = 0; i < vertexSet.size(); i++)
    {
        gv->addNode(vertexSet[i]->getInfo().id, vertexSet[i]->getInfo().x, vertexSet[i]->getInfo().y);
        if (vertexSet[i]->getInfo().name == "house")
            gv->setVertexColor(vertexSet[i]->getInfo().id, "red");
    }

    for (size_t i = 0; i < stations.size(); i++)
        gv->setVertexColor(stations[i], "green");

    int edgeID = 0;
    vector<int> edges;
    for (size_t i = 0; i < vertexSet.size(); i++)
    {
        vector<Edge<NodeInfo> > adj = vertexSet[i]->getAdjacentEdges();
        for (size_t j = 0; j < adj.size(); j++)
        {
            int src = vertexSet[i]->getInfo().id;
            int dst = adj[j].getDestination()->getInfo().id;

            if (!edgeExists(edges, src, dst))
            {
                gv->addEdge(edgeID, src, dst, EdgeType::UNDIRECTED);
                stringstream ss;
                ss << adj[j].getWeight();
                gv->setEdgeLabel(edgeID, ss.str());
                edges.push_back(src);
                edges.push_back(dst);
                edgeID++;
            }
        }
    }

    if (path.size() != 0)
    {
        for (size_t i = 0; i < path.size() - 1; i+=2)
        {
            gv->addEdge(edgeID, path[i], path[i + 1], EdgeType::UNDIRECTED);
            gv->setEdgeColor(edgeID, "green");
            gv->setEdgeThickness(edgeID, 2);
            edgeID++;
        }
    }

    cin.clear();
    cin.ignore(100, '\n');
    cout << "\n\tPress enter to continue...";
    cin.get();

    gv->closeWindow();
    delete(gv);
}
Esempio n. 2
0
/**
 *  \brief Prints the given graph
 *  \param grafo Graph to be printed
 */
void showGraph(Graph<Localizacao> &grafo)
{
 	GraphViewer *gv = new GraphViewer(800, 800, true);

 	gv->createWindow(800, 800);


 	gv->defineVertexColor("blue");
 	gv->defineEdgeColor("black");


	unsigned int id1, id2;
 	string s;
 	stringstream ss;


 	for (unsigned int i = 0; i < grafo.getVertexSet().size(); i++) {
 		id1 = grafo.getVertexSet()[i]->getInfo().getId();
 		s = grafo.getVertexSet()[i]->getInfo().getRua();
 		ss << 1;
 		gv->addNode(id1);
 		gv->setVertexLabel(id1, s + " " + ss.str());

 		if(grafo.getVertexSet()[i]->getInfo().getNome() == "Garagem")
 			gv->setVertexColor(id1,"red");
 		else if(grafo.getVertexSet()[i]->getInfo().getNome() == "Escola")
 			gv->setVertexColor(id1,"green");


 		ss.str("");
 	}
 	gv->rearrange();

 	for (unsigned int vert = 0; vert < grafo.getVertexSet().size(); vert++) {
 		for (unsigned int edge = 0; edge < grafo.getVertexSet()[vert]->getAdj().size(); edge++) {
 			id1 = grafo.getVertexSet()[vert]->getInfo().getId();
 			id2 = grafo.getVertexSet()[vert]->getAdj()[edge].getDest()->getInfo().getId();


 			if (grafo.getVertexSet()[vert]->path != NULL && grafo.getVertexSet()[vert]->path->getInfo().getId() == id2) {
 				gv->setEdgeColor(id1*1000 + id2, "green");
 				gv->setEdgeThickness(id1*1000 + id2, 5);
			}


 			gv->addEdge(id1 * 1000 + id2, id1, id2, EdgeType::DIRECTED);

 			gv->setEdgeWeight(id1 * 1000 + id2, grafo.getVertexSet()[vert]->getAdj()[edge].getWeight());
 			ss.str("");
 		}
 	}

 	gv->rearrange();

 #ifdef __linux__
 	sleep(1);
 #else
 	Sleep(100); // use sleep(1) in linux ; Sleep(100) on Windows
 #endif

}