Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Spiral Matrix - พิมพ์เมทริกซ์แบบเกลียวใน C++


ภาพรวมปัญหา

พิมพ์สมาชิกเมทริกซ์แบบเกลียว: แถวแรกซ้าย→ขวา, คอลัมน์สุดท้ายบน→ล่าง, แถวสุดท้ายขวา→ซ้าย, คอลัมน์แรกล่าง→บน, ทำซ้ำ

ตัวอย่าง

123456
789101112
131415161718

Output: 1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 15 16

อัลกอริทึม

  1. currRow = 0, currCol = 0
  2. while currRow < m และ currCol < n:
    • พิมพ์แถว currRow จาก currCol ถึง n-1, currRow++
    • พิมพ์คอลัมน์ n-1 จาก currRow ถึง m-1, n--
    • ถ้า currRow < m: พิมพ์แถว m-1 จาก n-1 ถึง currCol, m--
    • ถ้า currCol < n: พิมพ์คอลัมน์ currCol จาก m-1 ถึง currRow, currCol++

ตัวอย่างโค้ด C++

#include <iostream>
#define ROW 3
#define COL 6
using namespace std;

int array[ROW][COL] = {{1,2,3,4,5,6}, {7,8,9,10,11,12}, {13,14,15,16,17,18}};

void dispSpiral(int m, int n){
    int i, currRow = 0, currCol = 0;
    while (currRow < ROW && currCol < COL){
        for (i = currCol; i < n; i++) cout << array[currRow][i] << " ";
        currRow++;
        for (i = currRow; i < m; ++i) cout << array[i][n-1] << " ";
        n--;
        if (currRow < m){
            for (i = n-1; i >= currCol; --i) cout << array[m-1][i] << " ";
            m--;
        }
        if (currCol < n){
            for (i = m-1; i >= currRow; --i) cout << array[i][currCol] << " ";
            currCol++;
        }
    }
}

int main(){ dispSpiral(ROW, COL); }

Input / Output

Input:  [[1,2,3,4,5,6] [7,8,9,10,11,12] [13,14,15,16,17,18]]
Output: 1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 15 16