a.cpp
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int ne, nj, njt;
vector<int*> jh; // 2
vector<int*> jtx; // 4
vector<int*> jw; // 3
vector<int*> mw; // 6
void 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 10
9 2 9 4 10 6 10 8 1 3 3 5 5 7 9 10
1 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.dat
finding the mw(6) of elements
element no.1
mw = 7 8 -1 0 0 -1
element no.2
mw = 7 8 -1 -1 2 -1
element no.3
mw = 9 10 -1 -1 4 -1
element no.4
mw = 9 10 -1 -1 0 -1
element no.5
mw = 0 0 1 -1 2 3
element no.6
mw = -1 2 3 -1 4 5
element no.7
mw = -1 4 5 -1 0 6
element no.8
mw = 7 8 -1 9 10 -1