Ejemplo n.º 1
0
DECLARE_EXPORT string ProblemEarly::getDescription() const
{
  assert(getDemand() && !getDemand()->getDelivery().empty());
  Duration t(getDemand()->getDue()
      - getDemand()->getEarliestDelivery()->getDates().getEnd());
  return string("Demand '") + getDemand()->getName() + "' planned "
      + string(t) + " before its due date";
}
Ejemplo n.º 2
0
//你要完成的功能总入口
void search_route(char *topo[5000], int edge_num, char *demand)
{
	// DATA EXTRACTION:
	// Extract data from charater string array topo[][] to 2 dimensional array 'topoArray'.
	// string format:
	// 		linkID, sourceID, destinationID, cost (end of line is not \n!)
	int topoArray[edge_num][4];
	int includingSet[MAX_INCLUDING_SET];
	int cntPass;					// record valid number of elements in includingSet.
	int sourceID = 0, destinationID = 0;
	memset(topoArray, 0, sizeof(topoArray));	// initialize to 0.
	memset(includingSet, 0, sizeof(includingSet));

	getTopoArray(edge_num, topo, topoArray);
	getDemand(demand, includingSet, sourceID, destinationID, cntPass);

	//================================================================================
	// CREAT ADJACENT LIST.
	EdgeNode* nodeArray[MAX_VERTEX_NUM];		// array containing the first element of each list. Index of the array is nodeID.
	memset(nodeArray,0,sizeof(nodeArray));
	change2List(nodeArray,topoArray,edge_num);
#ifdef ROUTEDEBUG
	testChange2List(nodeArray);
#endif // DEBUG

	bool nodeArrayState[MAX_VERTEX_NUM];
	memset(nodeArray,0,sizeof(nodeArrayState));

	//priority_queue<int,vector<int>,greater<int> > pq;
	unsigned short result[] = {2, 6, 3};//示例中的一个解
	for (int i = 0; i < 3; i++)
		record_result(result[i]);
}
Ejemplo n.º 3
0
bool DAGraph::addLink(StarLink *link){
	assert(link !=  NULL);
	int index = link->getIndex();
	bool wasAdded = false;
	if (links_[index] == NULL) { // check if this link has already been added
		
		int nodeFromIndex = link->getNodeFromIndex();
		int nodeToIndex = link->getNodeToIndex();
		StarNode *nodeFrom = net_->getNodeWithLinks(nodeFromIndex);
		StarNode *nodeTo = net_->getNodeWithLinks(nodeToIndex);
		FPType demandTo = 0.0;
		if (nodes_[nodeToIndex] == NULL) {
			demandTo = mat_->getDemandByIndex(originIndex_, nodeToIndex);
		} else {
			demandTo = getDemand(nodeToIndex);
		}
		
		if ((nodeTo == NULL || !nodeTo->getIsZone() || demandTo > 0.0) && 
				(nodeFrom == NULL || !nodeFrom->getIsZone() 
					|| nodeFrom->getIndex() == originIndex_)) {
		
			links_[index] = link;
			wasAdded = true;
			++linkSize_;
			linkIndexes_.push_back(index);
			
			if (nodes_[nodeFromIndex] == NULL) {
				FPType demandFrom = mat_->getDemandByIndex(originIndex_, nodeFromIndex);
				DAGraphNode *newNode = new DAGraphNode(nodeFromIndex, demandFrom); 
				nodes_[nodeFromIndex] = newNode;
				nodeIndexes_[nodeSize_] = nodeFromIndex;
				++nodeSize_;
			}
			if (nodes_[nodeToIndex] == NULL) {
				DAGraphNode *newNode = new DAGraphNode(nodeToIndex, demandTo); 
				nodes_[nodeToIndex] = newNode;
				nodeIndexes_[nodeSize_] = nodeToIndex;
				++nodeSize_;
			} 
			(nodes_[nodeToIndex])->incomeLinks.push_back(link);
			(nodes_[nodeFromIndex])->outLinks.push_back(link);
		}
	}
	return wasAdded;
};