void TopologicSSSP::computeSSSP( const std::vector<node> &topSortArray, NodeArray<int> &sccArray) { resetArrays(); assert(m_G.getNodesNumber() == topSortArray.size()); assert(m_G.getNodesNumber() == sccArray.getSize()); assert(checkIfTopologicOrder(topSortArray, sccArray)); //m_componentDistanceArray[5] = 0; //m_componentDistanceArray[m_G.getNodesNumber()-1] = 0; for(int i = 0; i < topSortArray.size(); i++) { node v = topSortArray[i]; for(edge e = v->getFirstEdge(); e !=0; e = e->getNext()) { node u = e->getTarget(); if(e->getWeight() <= WEIGHT_BOUND && sccArray[u] != sccArray[v] ) { relaxEdge(sccArray[v], sccArray[u], e); } } } for(node v = m_G.getFirstNode(); v!= 0; v = v->getNext()) { m_distanceArray[v] = m_componentDistanceArray[ sccArray[v] ]; } }
PastWeightMatrix::PastWeightMatrix(int numRounds, int numOutputs) : previousOutputs(NULL), idealOutputs(NULL) { resetArrays(numRounds, numOutputs); }