示例#1
0
void Graph :: preprocess(){
	//we want all the edges to have pointer to the nodes its connecting
	//we also want all nodes to know about its adjacency nodes
	//we will do so by traversing all the edges
	for (int e=0; e< edgelist.size(); e++) {
		GraphEdge * thedg = edgelist.at(e);
		int frid = thedg->from;
		int toid = thedg->to;
		
		bool foundfrom = false;
		bool foundto = false;
		GraphNode * fromend;
		GraphNode * toend;
		//find these nodes in the adjlist
		for (int a=0; a<adjlist.size(); a++) {
			GraphNode * nd = adjlist.at(a);
			if (!foundfrom && nd->getnodeid() == frid) {
				fromend = nd;
				thedg->setFrom(fromend);
				fromend->addAdjacentEdge(thedg);
				foundfrom = true;
			}
			if (!foundto && nd->getnodeid() == toid) {
				toend = nd;
				thedg->setTo(toend);
				toend->addAdjacentEdge(thedg);
				foundto = true;
			}
			if(foundto && foundfrom){
				fromend -> addAdjacentNode(toend);
				toend->addAdjacentNode(fromend);
				
				break;
			}
			
		}
	}
}
示例#2
0
void Graph :: preprocessauthorgraph(){
	//we want all the edges to have pointer to the nodes its connecting
	//we also want all nodes to know about its adjacency nodes
	//we will do so by traversing all the edges
	
	//for this particular data we have to work with string id's
	
	for (int e=0; e< edgelist.size(); e++) {
		GraphEdge * thedg = edgelist.at(e);
		
		string frst = thedg->strfrom;
		string tostr = thedg->strto;
		
		bool foundfrom = false;
		bool foundto = false;
		
		GraphNode * fromend;
		GraphNode * toend;
		
		//find these nodes in the adjlist
		for (int a=0; a<adjlist.size(); a++) {
			GraphNode * nd = adjlist.at(a);
			if (!foundfrom && nd->getstrid() == frst) {
				fromend = nd;
				fromend->addAdjacentEdge(thedg);
				thedg->from = fromend -> getnodeid();
				thedg->setFrom(fromend);
				foundfrom = true;
			}
			if (!foundto && nd->getstrid() == tostr) {
				toend = nd;
				thedg->setTo(toend);
				toend->addAdjacentEdge(thedg);
				thedg->to = toend -> getnodeid();
				foundto = true;
			}
			if(foundto && foundfrom){
				fromend -> addAdjacentNode(toend);
				toend->addAdjacentNode(fromend);
				break;
			}
		}
	}
	
	//change labels to be the first letters
	
	for (int a=0; a<adjlist.size(); a++) {
		string lab = adjlist.at(a)->getLabel(); 
		istringstream iss(lab);
		
		vector<string> names;
		
		do
		{
			string sub;
			iss >> sub;
			names.push_back(sub);
			//cout << "Substring: " << sub << endl;
		} while (iss);
		
		//form the new string
		
		string newlabel;
		newlabel += names[0].substr(0,1);
		newlabel += names[1].substr(0,1);
		/*
		for(int i=0; i<names.size(); i++){
			newlabel += names[i].substr(0, 1);
		}
		*/
		adjlist.at(a)->setShortLabel(newlabel);
		
		//printf("old label: %s, new label: %s \n", lab.c_str(), newlabel.c_str());
		
	}
		
	ramdomizePositions(false); //since author graph has no initial positions
							   // we have to assign positions
	
}