http://poj.org/problem?id=2083
Description
B(n - 1) B(n - 1) B(n - 1) B(n - 1) B(n - 1)
Input
Output
Sample Input
1 2 3 4 -1
Sample Output
X - X X X X X - X X X X X X X X X X X X X X X X X X X X X X X X X - X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X -
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <cstdlib> #include <limits> #include <queue> #include <stack> #include <vector> #include <map> using namespace std; typedef long long LL; #define N 1750 #define INF 0x3f3f3f3f #define PI acos (-1.0) #define EPS 1e-5 #define met(a, b) memset (a, b, sizeof (a)) char str[N][N]; int h; void Init () { met (str, ' '); str[1][0] = 'X'; int hh = 1; for (int i=2; i<=7; i++) { for (int j=1; j<=hh; j++) { for (int k=0; k<hh; k++) { str[j][k+2*hh] = str[j][k]; str[j+hh][k+hh] = str[j][k]; str[j+2*hh][k] = str[j][k]; str[j+2*hh][k+2*hh] = str[j][k]; } } hh *= 3; } } int main () { int n; Init (); while (scanf ("%d", &n), n!=-1) { h = (int)pow (3.0, n-1); for (int i=1; i<=h; i++) { for (int j=0; j<h; j++) printf ("%c", str[i][j]); puts (""); } puts ("-"); } return 0; }
DFS搜索
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <cstdlib> #include <limits> #include <queue> #include <stack> #include <vector> #include <map> using namespace std; typedef long long LL; #define N 1750 #define INF 0x3f3f3f3f #define PI acos (-1.0) #define EPS 1e-5 #define met(a, b) memset (a, b, sizeof (a)) #define Lson rt<<1, l, tree[rt].mid() #define Rson rt<<1|1, tree[rt].mid()+1, r char str[N][N]; void DFS (int n, int x, int y) { if (n == 1) { str[x][y] = 'X'; return; } int h = (int) pow (3.0, (n-2)); DFS (n-1, x, y);///左上角 DFS (n-1, x, y+2*h);///右上角 DFS (n-1, x+h, y+h);///中间 DFS (n-1, x+2*h, y);///左下角 DFS (n-1, x+2*h, y+2*h);///右下角 } int main () { int n; while (scanf ("%d", &n), n!=-1) { met (str, ' '); DFS (n, 1, 1); int h = (int) pow (3.0, (n-1)); for (int i=1; i<=h; i++) { for (int j=1; j<=h; j++) printf ("%c", str[i][j]); puts (""); } puts ("-"); } return 0; }