/*ident "@(#)Map:demos/topsort.c 3.1" */ /****************************************************************************** * * C++ Standard Components, Release 3.0. * * Copyright (c) 1991, 1992 AT&T and Unix System Laboratories, Inc. * Copyright (c) 1988, 1989, 1990 AT&T. All Rights Reserved. * * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T and Unix System * Laboratories, Inc. The copyright notice above does not evidence * any actual or intended publication of such source code. * ******************************************************************************/ #include "topsort.h" #include #include main() { Map m; String p, s; while (cin >> p >> s) { if (p == s) (void) m[p]; else { m[s].predcnt++; m[p].succ.put(s); } } List zeroes; for (Mapiter i = m.first(); i; ++i) { if (i.value().predcnt == 0) zeroes.put(i.key()); } int n = 0; while (zeroes.get (p)) { cout << p << "\n"; n++; List& t = m[p].succ; while (t.get (s)) { if (--m[s].predcnt == 0) zeroes.put (s); } } if (n != m.size()) cout << "the ordering contains a loop\n"; return 0; }