// switch box routing
#include <iostream.h>
#include "stack.h"
bool CheckBox(int net[], int n)
{// Determine whether the switch box is routable.
Stack<int> *s = new Stack<int> (n);
// scan nets clockwise
for (int i = 0; i < n; i++) {
// examine net[i]
if (!s->IsEmpty()) {// check with top net
if (net[i] == net[s->Top()]) {
// net[i] routable, delete from stack
int x;
s->Delete(x);}
else s->Add(i);}
else s->Add(i);
}
// any unrouted nets left?
if (s->IsEmpty()) {// no nets remain
delete s;
cout << "Switch box is routable" << endl;
return true;}
delete s;
cout << "Switch box is not routable" << endl;
return false;
}
void main(void)
{
int *net, n;
cout << "Type number of pins in switch box " << endl;
cin >> n;
try {net = new int [n];
cout << "Type net numbers for pins 1 through " << n << endl;
for (int i = 0; i<n; i++) cin >> net[i];
CheckBox(net, n);}
catch (NoMem)
{cout << "Insufficient memory" << endl;}
}
Ly8gc3dpdGNoIGJveCByb3V0aW5nCgojaW5jbHVkZSA8aW9zdHJlYW0uaD4KI2luY2x1ZGUgInN0YWNrLmgiCgpib29sIENoZWNrQm94KGludCBuZXRbXSwgaW50IG4pCnsvLyBEZXRlcm1pbmUgd2hldGhlciB0aGUgc3dpdGNoIGJveCBpcyByb3V0YWJsZS4KICAgU3RhY2s8aW50PiAqcyA9IG5ldyBTdGFjazxpbnQ+IChuKTsKCiAgIC8vIHNjYW4gbmV0cyBjbG9ja3dpc2UKICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgLy8gZXhhbWluZSBuZXRbaV0KICAgICAgaWYgKCFzLT5Jc0VtcHR5KCkpIHsvLyBjaGVjayB3aXRoIHRvcCBuZXQKICAgICAgICAgaWYgKG5ldFtpXSA9PSBuZXRbcy0+VG9wKCldKSB7CiAgICAgICAgICAgIC8vIG5ldFtpXSByb3V0YWJsZSwgZGVsZXRlIGZyb20gc3RhY2sKICAgICAgICAgICAgaW50IHg7CiAgICAgICAgICAgIHMtPkRlbGV0ZSh4KTt9CiAgICAgICAgIGVsc2Ugcy0+QWRkKGkpO30KICAgICAgZWxzZSBzLT5BZGQoaSk7CiAgICAgIH0KCiAgIC8vIGFueSB1bnJvdXRlZCBuZXRzIGxlZnQ/CiAgIGlmIChzLT5Jc0VtcHR5KCkpIHsvLyBubyBuZXRzIHJlbWFpbgogICAgICBkZWxldGUgczsKICAgICAgY291dCA8PCAiU3dpdGNoIGJveCBpcyByb3V0YWJsZSIgPDwgZW5kbDsKICAgICAgcmV0dXJuIHRydWU7fQoKICAgZGVsZXRlIHM7CiAgIGNvdXQgPDwgIlN3aXRjaCBib3ggaXMgbm90IHJvdXRhYmxlIiA8PCBlbmRsOwogICByZXR1cm4gZmFsc2U7Cn0KCnZvaWQgbWFpbih2b2lkKQp7CiAgIGludCAqbmV0LCBuOwogICBjb3V0IDw8ICJUeXBlIG51bWJlciBvZiBwaW5zIGluIHN3aXRjaCBib3ggIiA8PCBlbmRsOwogICBjaW4gPj4gbjsKICAgdHJ5IHtuZXQgPSBuZXcgaW50IFtuXTsKICAgICAgICBjb3V0IDw8ICJUeXBlIG5ldCBudW1iZXJzIGZvciBwaW5zIDEgdGhyb3VnaCAiIDw8IG4gPDwgZW5kbDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaTxuOyBpKyspIGNpbiA+PiBuZXRbaV07CiAgICAgICAgQ2hlY2tCb3gobmV0LCBuKTt9CiAgIGNhdGNoIChOb01lbSkKICAgICAge2NvdXQgPDwgIkluc3VmZmljaWVudCBtZW1vcnkiIDw8IGVuZGw7fQp9Cg==