Welcome! You have been invited by Tùy Tiện to join our community. Please click here to register.
1 người đang xem
Bài viết: 28 Tìm chủ đề
3432 2
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][i] = a[i][0] = a[n+1][i] = a[i][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][i] << " ";
        cout << "\n";
    }
}

int main(){
    read();
    run();

    return 0;
}
 

Những người đang xem chủ đề này

Nội dung nổi bật

Xu hướng nội dung

Back