📄 equiv.cpp
字号:
// offline equivalence classes#include <iostream.h>#include <stdlib.h>#include "chain.h"#include "citer.h"#include "lstack.h"void main(void){// Offline equivalenece classes. int n, r; // input n and r cout << "Enter number of elements" << endl; cin >> n; if (n < 2) {cerr << "Too few elements" << endl; exit(1);} cout << "Enter number of relations" << endl; cin >> r; if (r < 1) {cerr << "Too few relations" << endl; exit(1);} // create an array of n chains Chain<int> *chain; try {chain = new Chain<int> [n+1];} catch (NoMem) {cerr << "Out of memory" << endl; exit(1);} // input the r relations and put on chains for (int i = 1; i <= r; i++) { cout << "Enter next relation/pair" << endl; int a, b; cin >> a >> b; chain[a].Insert(0,b); chain[b].Insert(0,a); } // initialize to output classes LinkedStack<int> stack; bool *out; try {out = new bool [n+1];} catch (NoMem) {cerr << "Out of memory" << endl; exit(1);} for (int i = 1; i <= n; i++) out[i] = false; // output classes for (int i = 1; i <= n; i++) if (!out[i]) {// start of a new class cout << "Next class is: " << i << ' '; out[i] = true; stack.Add(i); // get rest of class from stack while (!stack.IsEmpty()) { int *q, j; stack.Delete(j); // elements on chain[j] are in // same class, use iterator c // to get them ChainIterator<int> c; q = c.Initialize(chain[j]); while (q) {// q is in same class if (!out[*q]) { cout << *q << ' '; out[*q] = true; stack.Add(*q);} q = c.Next(); } } cout << endl; } cout << endl << "End of class list" << endl;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -