啊啊啊啊啊啊啊啊啊啊啊!!!!!!!! 这抽象代码bug找不了一点啊啊啊啊! 各位神犇来help me啊!
#include <bits/stdc++.h>
using namespace std;
int a[1030][1030];
int p[11] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024};
void set1(int x, int y, int m)
{
if (m == 1) a[x][y + 1] = a[x + 1][y] = a[x + 1][y + 1] = 1;
else if (m == 2) a[x][y - 1] = a[x + 1][y - 1] = a[x + 1][y] = 2;
else if (m == 3) a[x - 1][y] = a[x - 1][y + 1] = a[x][y + 1] = 3;
else if (m == 4) a[x - 1][y] = a[x - 1][y - 1] = a[x][y - 1] = 4;
return;
}
int set2(int x, int y, int k, int a, int b)
{
bool v1 = a < p[k - 1] + x, v2 = a >= p[k - 1] + x;
bool v3 = b < p[k - 1] + y, v4 = b >= p[k - 1] + y;
if (v1 && v3) {set1(p[k - 1] + x - 1, p[k - 1] + y - 1, 1); return 1;}
else if (v2 && v3) {set1(p[k - 1] + x - 1, p[k - 1] + y, 2); return 2;}
else if (v1 && v4) {set1(p[k - 1] + x, p[k - 1] + y - 1, 3); return 3;}
else if (v2 && v4) {set1(p[k - 1] + x, p[k - 1] + y, 4); return 4;}
}
void f(int x, int y, int k, int a, int b)
{
if (k == 1)
{
if (a == x && b == y) set1(a, b, 1);
else if (a == x + 1 && b == y) set1(a, b, 3);
else if (a == x && b == y + 1) set1(a, b, 2);
else if (a == x + 1 && b == y + 1) set1(a, b, 4);
return;
}
int u = set2(x, y, k, a, b), la[4], lb[4];
la[0] = p[k - 1] + x - 1, la[1] = p[k - 1] + x - 1, la[2] = p[k - 1] + x, la[3] = p[k - 1] + x;
lb[0] = p[k - 1] + y - 1, lb[1] = p[k - 1] + y, lb[2] = p[k - 1] + y - 1, lb[3] = p[k - 1] + y;
if (u == 1)
{
la[0] = a, lb[0] = b;
}
else if (u == 2)
{
la[1] = a, lb[1] = b;
}
else if (u == 3)
{
la[2] = a, lb[2] = b;
}
else if (u == 4)
{
la[3] = a, lb[3] = b;
}
f(x, y, k - 1, la[0], lb[0]);
f(p[k - 1] + x, y, k - 1, la[1], lb[1]);
f(x, p[k - 1] + y, k - 1, la[2], lb[2]);
f(p[k - 1] + x, p[k - 1] + y, k - 1, la[3], lb[3]);
return;
}
int main()
{
int n, i, j;
cin >> n >> i >> j;
a[i][j] = 9;
f(1, 1, n, i, j);
for (int i = 1; i <= p[n]; i++)
{
for (int j = 1; j <= p[n]; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
这只是调试代码,输出填补完后的地毯,用9代替公主位,要死啦!!!!!