Exemple #1
0
void Pathfinder::showResult(){
	int finalCost=0,wlCost=0,pins=0;
	rt_dir UP=RT_UP;
	for(map<int,t_nets>::iterator nets_it=netlist.begin(); nets_it!=netlist.end();++nets_it){
		for(list<int>::iterator nodes_it=nets_it->second.netTree.begin(); nodes_it!=nets_it->second.netTree.end();++nodes_it){
			if(areConnected(*nodes_it, RT_EAST)){
				++wlCost;
				finalCost+=costs[getPosZ(*nodes_it)*3];	
				//cout << *nodes_it << " -> " << (*nodes_it)+1 << endl; 
			}
			if(areConnected(*nodes_it, RT_NORTH)){
				++wlCost;
				finalCost+=costs[getPosZ(*nodes_it)*3+1];
				//cout << *nodes_it << " -> " << (*nodes_it)+sizeX << endl;
			}
			if(areConnected(*nodes_it, RT_UP)){
				if(areConnected(getDir(*nodes_it, UP), RT_UP)) 
					++pins;
				else pins+=2;  
				++wlCost;
				finalCost+=costs[getPosZ(*nodes_it)*3+2];
				//cout << *nodes_it << " -> " << (*nodes_it)+sizeXY << endl;
			}
			//			cout << "(" << getPosX(*nodes_it) << " " <<getPosY(*nodes_it)<< " " <<getPosZ(*nodes_it)<< ")  --("<< graph[*nodes_it].net << " " << nets_it->second.finalNet <<")-->  (" << graph[*nodes_it].rightIter << " " <<graph[*nodes_it].upIter<< " " <<graph[*nodes_it].upLayerIter << ") " << endl;
		}
	}
	cout << "-> Cost =" << finalCost << endl;
	cout << "-> Wirelength =" << wlCost << endl;
	cout << "-> # Pins =" << pins << endl;
}
Exemple #2
0
void Graph::delEdge(int i, int j) {
  if (areConnected(i,j))
    {
      igraph_integer_t eid;
      igraph_es_t es;
      igraph_get_eid(graph, &eid, i,j,0);
      es = igraph_ess_1(eid);
      igraph_delete_edges(graph, es);
    }
}
Exemple #3
0
bool Graph::flipConn(int i, int j) {
  if (not areConnected(i,j))
    addEdge(i,j);
  else {
    delEdge(i,j);
    if (not isConnected()) {
      addEdge(i,j);
      return false;
    }
  }
  return true;
}
Exemple #4
0
void Graph::flipEdge(int i, int j) {
  areConnected(i,j) ? delEdge(i,j):addEdge(i,j);
}
Exemple #5
0
void Graph::addEdge(int i, int j) {
  if (not areConnected(i,j))
    igraph_add_edge(graph, i, j);
}