Hack Não Với Bài Toán Ma Trận Xoắn Ốc

Hack Não Với Bài Toán Ma Trận Xoắn Ốc

·

2 min read

image.png

image.png

Ý tưởng cho bài này là nạp các số từ các cạnh ngoài nhất của ma trận vào trong lần lượt theo trường hợp:

  • TH1: Nạp từ trái qua phải
  • TH2: Nạp từ trên xuống dưới
  • TH3: Nạp từ phải qua trái
  • TH4: Nạp từ dưới lên trên

Ta khởi tạo các giá trị

  • Cột trái: c1=0
  • Cột phải: c2=n-1
  • Hàng trên: h1=0
  • Hàng dưới: h2=n-1
  • Biến đếm: =1
TH1: a[i][j] với i=h1; c <= j <= c2; j++
TH2: a[i][j] với j=c2; h1 <= i <= h2; i++
TH3: a[i][j] với i=h2; c2 >= j >= c1; j--
TH4: a[i][j] với j=c1; c2 >= i >= c1; i--
int n; cin >> n;
    int a[n][n];
    int count = 1;
    int h1 = 0; h2 = n-1; c1 = 0; c2 = n-1;
    while(h1 <= h2 && c1 <= c2) {
        // TH1
        for(int i = c1; i <= c2; i++) {
            a[h1][i] = count;
            count++;
        }
        h1++;

        // TH2
        for(int = h1; i <= h2; i++) {
            a[i][c2] = count;
            count++;
        }
        c2--;

        // TH3
        if(c1  <= c2) {
            for(int i = c2; i >= c1; i--) {
                a[h2][i] = count;
                count++;
            }
            h2--;
        }

        // TH4
        if(h1 <= h2) {
            for(int i = h2; i >= h1; i--) {
                a[i][c1] = count;
                count++;
            }
            c1++;
        }
    }

    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
}