void Kruskal(void) { int edge = 0; int ex; while (edge < V - 1) { ex = SelectEdge(); if (!Cycle(ex)) { AddEdge(ex); edge++; PrintST(ex); } else { E[ex].selected = 2; } } cout << "Totol Cost is : " << TotalCost << "\n"; }
void CMesh::Simplify(int iVertices2Remain, float fMaxError, bool bConsiderMaterials) { TEdge *pEdge; bool bRemoveSecond; m_bConsiderMaterials = bConsiderMaterials; if (!m_arrCollapses.m_iCount) { InitOutputs(); InitBorders(); } InitEdgeEvaluation(); while (m_hashVertices.m_iCount > iVertices2Remain) { if (!SelectEdge(pEdge, bRemoveSecond, fMaxError)) break; RecordCollapse(pEdge, bRemoveSecond); CollapseEdge(pEdge, bRemoveSecond); // CheckEdges(); } }
void GameState::HandleEvents(sf::Event theEvent) { // Exit program if Escape key is pressed #if (SFML_VERSION_MAJOR < 2) if((theEvent.Type == sf::Event::KeyReleased) && (theEvent.Key.Code == sf::Key::Escape)) #else if((theEvent.type == sf::Event::KeyReleased) && (theEvent.key.code == sf::Keyboard::Escape)) #endif { // Signal the application to exit mApp.Quit(GQE::StatusAppOK); } // Update selected edge if mouse moved #if (SFML_VERSION_MAJOR < 2) if(theEvent.Type == sf::Event::MouseMoved) #else if(theEvent.type == sf::Event::MouseMoved) #endif { UpdateSelected(theEvent); } #if (SFML_VERSION_MAJOR < 2) if(theEvent.Type == sf::Event::MouseButtonReleased) #else if(theEvent.type == sf::Event::MouseButtonReleased) #endif { // If current player is 0 then the last game ended, start a new game if(0 == mCurrentPlayer) { // Reinitialize the board and start a new game ReInit(); } else { // Player has selected an edge SelectEdge(); } } }
//======================================================================= //function : Perform //purpose : //======================================================================= void Partition_Loop::Perform() { TopTools_DataMapOfShapeListOfShape MVE; TopTools_DataMapIteratorOfDataMapOfShapeListOfShape Mapit, Mapit1; TopTools_ListIteratorOfListOfShape itl; TopoDS_Vertex V1,V2; //----------------------------------- // Construction map vertex => edges //----------------------------------- for (itl.Initialize(myConstEdges); itl.More(); itl.Next()) { TopoDS_Edge& E = TopoDS::Edge(itl.Value()); StoreInMVE(myFace,E,MVE); } //---------------------------------------------- // Construction of all the wires and of all the new faces. //---------------------------------------------- TopTools_MapOfOrientedShape UsedEdges; while (!MVE.IsEmpty()) { TopoDS_Vertex VF,CV; TopoDS_Edge CE,NE,EF; TopoDS_Wire NW; BRep_Builder B; Standard_Boolean End= Standard_False; B.MakeWire(NW); //-------------------------------- // EF first edge. //-------------------------------- Mapit.Initialize(MVE); EF = CE = TopoDS::Edge(Mapit.Value().First()); TopExp::Vertices(CE,V1,V2); //-------------------------------- // VF first vertex //-------------------------------- if (CE.Orientation() == TopAbs_FORWARD) { CV = VF = V1; } else { CV = VF = V2; } if (!MVE.IsBound(CV)) continue; for ( itl.Initialize(MVE(CV)); itl.More(); itl.Next()) { if (itl.Value().IsEqual(CE)) { MVE(CV).Remove(itl); break; } } int i = 0; while (!End) { //------------------------------- // Construction of a wire. //------------------------------- TopExp::Vertices(CE,V1,V2); if (!CV.IsSame(V1)) CV = V1; else CV = V2; B.Add (NW,CE); UsedEdges.Add(CE); //-------------- // stop test //-------------- if (!MVE.IsBound(CV) || MVE(CV).IsEmpty() || CV.IsSame(VF) ) { if (CV.IsSame(VF)) { if (MVE(CV).Extent() == 1 ) MVE.UnBind(CV); else { for ( itl.Initialize(MVE(CV)); itl.More(); itl.Next()) { if (itl.Value().IsEqual(CE)) { MVE(CV).Remove(itl); break; } } } } End=Standard_True; } //-------------- // select edge //-------------- else { Standard_Boolean find = SelectEdge(myFace,CE,CV,NE,MVE(CV)); if (find) { CE=NE; if (MVE(CV).IsEmpty()) MVE.UnBind(CV); if (CE.IsNull() ) { MESSAGE ( " CE is NULL !!! " ) End=Standard_True; } } else { MESSAGE ( " edge doesn't exist " ) End=Standard_True; } } } //----------------------------- // Test if the wire is closed //----------------------------- if (VF.IsSame(CV) && SamePnt2d(VF,EF,CE,myFace)) { } else{ MESSAGE ( "wire not closed" ) } myNewWires.Append (NW); } PurgeNewEdges(myConstEdges,UsedEdges); }