#include using namespace std; const int N = 210; //2*n+10 char a[N]; int n; //输出当前行 void print() { for (int i = 1; i <= 2 * n + 2; i++) cout << a[i]; cout << endl; } //递归函数 void dfs(int x) { //输出当前行 print(); //大于4时,可以进行递归 if (x > 4) { swap(a[x], a[2 * x + 1]), swap(a[x + 1], a[2 * x + 2]); // 中间的o*与最后--交换 //输出 print(); swap(a[x], a[2 * x - 1]), swap(a[x + 1], a[2 * x]); //将最右边的**与--位置交换 //数值-1,进行递归 dfs(x - 1); return; } //等于4时,是一个固定的路线 swap(a[4], a[9]), swap(a[5], a[10]); print(); swap(a[4], a[8]), swap(a[5], a[9]); print(); swap(a[2], a[8]), swap(a[3], a[9]); print(); swap(a[2], a[7]), swap(a[3], a[8]); print(); swap(a[1], a[7]), swap(a[2], a[8]); print(); } int main() { cin >> n; //初始化棋盘 for (int i = 1; i <= n; i++) a[i] = 'o'; //前n个是o for (int i = 1; i <= n; i++) a[n + i] = '*'; //中间n个是* for (int i = 1; i <= 2; i++) a[2 * n + i] = '-'; //最后两个是- //递归 dfs(n); return 0; }