a.cpp
#include #include #include using namespace std;int ne, nj, njt;vector jh; // 2vector jtx; // 4vector jw; // 3vector mw; // 6void qjw(){ int counter = 1; for (int i = 0; i < nj; ++i) { int *toAdd = new int(3); int jtxIndex = -1; // search from jtx for (int j = 0; j < njt; ++j) { if (jtx[j][0] == i + 1) { jtxIndex = j; break; } } for (int k = 0; k < 3; ++k) { if (jtxIndex == -1) { toAdd[k] = counter++; continue; } int jtxValue = jtx[jtxIndex][k + 1]; switch (jtxValue) { case 10001: toAdd[k] = -1; break; case 0: toAdd[k] = counter++; break; case 1: toAdd[k] = 0; break; case 1001: jtxValue = 1; default: // best to buffer this, and do this after loop.. toAdd[k] = jw[jtxValue - 1][k]; break; } } jw.push_back(toAdd); }}void qmw(){ for (int i = 0; i < ne; ++i) { int *toAdd = new int(6); int j1 = jh[i][0] - 1; int *jj1 = jw[j1]; for (int j = 0; j < 3; ++j) toAdd[j] = jj1[j]; int j2 = jh[i][1] - 1; int *jj2 = jw[j2]; for (int j = 3; j < 6; ++j) toAdd[j] = jj2[j - 3]; mw.push_back(toAdd); }}int main(int argc, char **argv){ if (argc < 2) return -1; ifstream ifs(argv[1]); if (!ifs.is_open()) { cout << "can not open file: " << argv[1] << endl; return -1; } ifs >> ne >> nj >> njt; for (int i = 0; i < ne; ++i) { int *e = new int(2); ifs >> e[0] >> e[1]; jh.push_back(e); } for (int i = 0; i < njt; ++i) { int *jt = new int(4); ifs >> jt[0] >> jt[1] >> jt[2] >> jt[3]; jtx.push_back(jt); } qjw(); qmw(); cout << "finding the mw(6) of elements" << endl; for (int i = 0; i < ne; ++i) { cout << "element no." << (i + 1) << endl; int *m = mw[i]; cout << "mw = "; for (int j = 0; j < 6; ++j) cout << m[j] << " "; cout << endl; } return 0;}
e.dat
8 10 109 2 9 4 10 6 10 8 1 3 3 5 5 7 9 101 1 1 0 2 1 1 10001 3 10001 0 0 4 3 3 10001 5 10001 0 0 6 5 5 10001 7 10001 1 0 8 7 1 10001 9 0 0 10001 10 0 0 10001
test & output
g++ a.cpp -o a./a e.datfinding the mw(6) of elementselement no.1mw = 7 8 -1 0 0 -1 element no.2mw = 7 8 -1 -1 2 -1 element no.3mw = 9 10 -1 -1 4 -1 element no.4mw = 9 10 -1 -1 0 -1 element no.5mw = 0 0 1 -1 2 3 element no.6mw = -1 2 3 -1 4 5 element no.7mw = -1 4 5 -1 0 6 element no.8mw = 7 8 -1 9 10 -1