Pagini recente » Cod sursa (job #1056947) | Cod sursa (job #2108852) | Cod sursa (job #1724073) | Cod sursa (job #1675919) | Cod sursa (job #803642)
Cod sursa(job #803642)
#include <fstream>
using namespace std;
int Hilbert(int k, int i, int j, int state)
{
int s = 0, mij, np;
while (k > 0) {
mij = 1 << (k - 1);
if (i < mij && j < mij) { //CADRAN 1
switch(state) {
case 0: np = 0; state = 1; break;
case 1: np = 0; state = 0; break;
case 2: np = 2; break;
case 3: np = 2; break;
}
} else if (i >= mij && j < mij) { //CADRAN 2
switch(state) {
case 0: np = 1; break;
case 1: np = 3; state = 2; break;
case 2: np = 3; state = 1; break;
case 3: np = 1; break;
}
i -= mij;
} else if (i >= mij) { //CADRAN 3
switch(state) {
case 0: np = 2; break;
case 1: np = 2; break;
case 2: np = 0; state = 3; break;
case 3: np = 0; state = 2; break;
}
i -= mij;
j -= mij;
} else { //CADRAN 4
switch(state) {
case 0: np = 3; state = 3; break;
case 1: np = 1; break;
case 2: np = 1; break;
case 3: np = 3; state = 0; break;
}
j -= mij;
}
s += np * mij * mij;
k--;
}
return s;
}
int main()
{
ifstream in("fractal.in");
ofstream out("fractal.out");
int k, x, y;
in>>k>>x>>y;
out<<Hilbert(k, y-1, x-1, 0);
return 0;
}