Пример #1
0
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;
}
Пример #2
0
// 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;
}
Пример #3
0
void wgraph::esort() {
// Sort the edges by cost.
	hsort(); bldadj();
}