Ejemplo n.º 1
0
void Scene::Unselect( freyja::Node* node )
{
	NodeList* lst = GetSelectionList( node );
	if ( lst)
	{
		lst->remove( node );
	}
}
 double maxFlow(int ss, int tt) {
     s = ss;
     t = tt;
     initFlow();
     while (!lst.empty()) {
         int v = lst.remove();
         discharge(v);
     }
     return e[t];
 }
Ejemplo n.º 3
0
bool Scene::Remove( freyja::Node* node )
{
	NodeList* lst = GetList( node );
	bool ret = false;

	if ( lst)
	{
		// FIXME: Remove from selected list also.
		lst->remove( node );
		ret = true;
	}

	return ret;
}
Ejemplo n.º 4
0
int main(int argc, char** argv) {
    NodeList<int> llista;
    OrderedList<int> llistaOrd;
    cout << "Vols introduir les dades per consola o per fitxer (C/F)?" << endl;
    if(cin.get() == 'F') {
        FILE * pFile;
        pFile = fopen("fitxer.txt" , "r");
        
        int n;
        ifstream fe("fitxer.txt");
        while (scanf("%d", &n) == 1) {
            llista.insert(n);
            llistaOrd.insert(n);
        }
    }
    else {
        cout << "Introdueix una seqüència de nombres acabada per 99:" << endl;
        int aux;
        cin >> aux;
        while(aux != 99) {
            llista.insert(aux);
            llistaOrd.insert(aux);
            cin >> aux;
        }
    }
    cout << "Llista: ";
    llista.show();
    cout << "Llista Ordenada: ";
    llistaOrd.show();
    cout << endl << "Introdueix un nombre a cercar:" << endl;
    cin >> aux;
    cout << "Nombres posteriors a " << aux << " a la llista:" << endl;
    llista.begin();
    bool trobat = false;
    while(!llista.end()) {
        if(trobat) {
            cout << llista.get() << "  " ; 
        }
        else {
            if(llista.get() == aux) trobat = true;
        }
        llista.next();
    }
    cout << endl << "Nombres posteriors a " << aux << " a la llista ordenada:" <<endl;  
    trobat = false;
    llistaOrd.begin();
    while(!llistaOrd.end()) {
        if(trobat) {
            cout << llistaOrd.get() << "  " ; 
        }
        else {
            if(llistaOrd.get() == aux) trobat = true;
        }
        llistaOrd.next();
    }    
    cout << endl << "Llista esborrada i recursos alliberats" << endl;
    llista.begin();
    while(!llista.end()) {
        llista.remove();
    }
    cout << "Llista ordenada esborrada i recursos alliberats:" << endl;
    llistaOrd.begin();
    while(!llistaOrd.end()) {
        
        llistaOrd.remove();
    }
    cout << "Llista:" << endl;
    llista.show();
    cout << "Llista ordenada:" << endl;
    llistaOrd.show();
    return 0;
}
Ejemplo n.º 5
0
NodeList* Pathfinder::PathBetweenPoints(int x1, int y1, int x2, int y2) {

	// Set up all the data structures we need, lots o' stuff
	NodeList Q;
	PreviousNodeMap prev;
	PopulateListWithNodes(Q);
	Node* source = m_nodeMap[x1][y1];
	Node* dest = m_nodeMap[x2][y2];
	// Make sure source and dest are in Q
	if(find(Q.begin(), Q.end(), source) == Q.end()) {
		Q.push_back(source);
	}
	if(find(Q.begin(), Q.end(), dest) == Q.end()) {
		Q.push_back(dest);
	}
	ResetNodes(Q, x2, y2);
	source->SetDistance(0);

	while(Q.size() > 0) {
		Q.sort(NodesByScore);
		Node* u = Q.front();
		if(u == dest) {
			// found our node, break!
			break;
		}
		if(u->GetDistance() == NODE_INFINITY) {
			// In this case, no valid path from point 1 to point 2
			return NULL;
		}

		// Remove it from the unvisited queue
		Q.remove(u);

		// Update its neighbors
		int x = u->GetX();
		int y = u->GetY();

		if(x - 1 >= 0 && m_nodeMap[x-1][y]) {
			Node* toUpdate = m_nodeMap[x-1][y];
			if(u->GetDistance() + 1 < toUpdate->GetDistance()) {
				prev[toUpdate] = u;
				toUpdate->SetDistance(u->GetDistance() + 1);
			}
		}
		if(x + 1 < m_currentLevel->GetWidth() && m_nodeMap[x+1][y]) {
			Node* toUpdate = m_nodeMap[x+1][y];
			if(u->GetDistance() + 1 < toUpdate->GetDistance()) {
				prev[toUpdate] = u;
				toUpdate->SetDistance(u->GetDistance() + 1);
			}
		}
		if(y - 1 >= 0 && m_nodeMap[x][y-1]) {
			Node* toUpdate = m_nodeMap[x][y-1];
			if(u->GetDistance() + 1 < toUpdate->GetDistance()) {
				prev[toUpdate] = u;
				toUpdate->SetDistance(u->GetDistance() + 1);
			}
		}
		if(y + 1 < m_currentLevel->GetHeight() && m_nodeMap[x][y+1]) {
			Node* toUpdate = m_nodeMap[x][y+1];
			if(u->GetDistance() + 1 < toUpdate->GetDistance()) {
				prev[toUpdate] = u;
				toUpdate->SetDistance(u->GetDistance() + 1);
			}
		}
	}
	// Prep the list of path nodes to send back
	NodeList* toReturn = new NodeList();
	Node* next = prev[dest];
	toReturn->push_back(next);
	while(prev.find(next) != prev.end() && prev[next] != source) {
		next = prev[next];
		toReturn->push_back(next);
	}

	return toReturn;

}