Link bài: Thuật toán: Ta bao các cạnh bên ngoài của thành bằng các phần tử mang giá trị 1. Tường thành là một mảng 2 chiều. Tạo một chương trình con để di chuyển, khi đụng trúng bờ bao 1 hoặc đụng trúng lớp tường bên ngoài, sẽ lập tức rẽ phải. Bài này gần tương tự bài VOXO, chỉ khác VOXO đi từ trong ra, bài này đi từ ngoài vào. Code: Mã: #include<bits/stdc++.h> using namespace std; int n, value_moment; int a[107][107]; void runfor(int position_x, int position_y, int direction_x, int direction_y){ int x = position_x; int y = position_y; while (a[x+direction_x][y+direction_y] == 0){ a[x][y] = value_moment+1; x += direction_x; y += direction_y; value_moment++; } if (value_moment == n*n-1){ a[x][y] = n*n; return; } runfor(x, y, -direction_y, direction_x); } void read(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("CLOA.INP", "r", stdin); //freopen("CLOA.OUT", "w", stdout); cin >> n; } void run(){ for (int i = 0; i <= n+1; i++) a[0] = a[0] = a[n+1] = a[n+1] = 1; runfor(1, 1, 1, 0); for (int i = 1; i <= n; i++){ for (int j = 1; j <= n; j++) cout << a[j] << " "; cout << "\n"; } } int main(){ read(); run(); return 0; }