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; }
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); } }
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; }
void Graph::flipEdge(int i, int j) { areConnected(i,j) ? delEdge(i,j):addEdge(i,j); }
void Graph::addEdge(int i, int j) { if (not areConnected(i,j)) igraph_add_edge(graph, i, j); }