bool wgraph::get(FILE* f) { // Get graph from f. if (fscanf(f,"%d%d",&N,&M) != 2) return false; delete [] firstedge; delete [] edges; firstedge = new edge[N+1]; edges = new wgedge[M+2]; n = N; m = 1; for (int i = 1; i <= 2*M; i++) { // each edge appears twice in input if (!getedge(m,f)) break; if (edges[m].l > n || edges[m].r > n) fatal("wgraph::get: out of range vertex number"); if (edges[m].l < edges[m].r) { if (m > M) fatal("wgraph::get: edge mismatch"); m++; } } m--; bldadj(); return true; }
// Input graph. Allocate space only if necessary. bool digraph::getGraph(istream & is) { int nuN, nuM; vertex u,v; is >> nuN >> nuM; if (nuN > mN || nuM > mM) { fSpace(); mN = nuN; mM = nuM; mSpace(); } N = nuN; M = nuM; edge e = 1; while (e <= M) { if (!getEdge(is,e)) return false; } bldadj(); return true; }
void wgraph::esort() { // Sort the edges by cost. hsort(); bldadj(); }