def print_spiral(matrix):
if not matrix or not matrix[0]:
return
top, bottom = 0, len(matrix) - 1
left, right = 0, len(matrix[0]) - 1
while top <= bottom and left <= right:
# Print the top row
for i in range(left, right + 1):
print(matrix[top][i], end=" ")
top += 1
# Print the right column
for i in range(top, bottom + 1):
print(matrix[i][bottom], end=" ")
right -= 1
if top <= bottom:
# Print the bottom row
for i in range(right, left - 1, -1):
print(matrix[right][i], end=" ")
bottom -= 1
if left <= right:
# Print the left column
for i in range(bottom, top - 1, -1):
print(matrix[i][left], end=" ")
left += 1
# Example usage:
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
]
print_spiral(matrix)
ZGVmIHByaW50X3NwaXJhbChtYXRyaXgpOgogICAgaWYgbm90IG1hdHJpeCBvciBub3QgbWF0cml4WzBdOgogICAgICAgIHJldHVybgoKICAgIHRvcCwgYm90dG9tID0gMCwgbGVuKG1hdHJpeCkgLSAxCiAgICBsZWZ0LCByaWdodCA9IDAsIGxlbihtYXRyaXhbMF0pIC0gMQoKICAgIHdoaWxlIHRvcCA8PSBib3R0b20gYW5kIGxlZnQgPD0gcmlnaHQ6CiAgICAgICAgIyBQcmludCB0aGUgdG9wIHJvdwogICAgICAgIGZvciBpIGluIHJhbmdlKGxlZnQsIHJpZ2h0ICsgMSk6CiAgICAgICAgICAgIHByaW50KG1hdHJpeFt0b3BdW2ldLCBlbmQ9IiAiKQogICAgICAgIHRvcCArPSAxCgogICAgICAgICMgUHJpbnQgdGhlIHJpZ2h0IGNvbHVtbgogICAgICAgIGZvciBpIGluIHJhbmdlKHRvcCwgYm90dG9tICsgMSk6CiAgICAgICAgICAgIHByaW50KG1hdHJpeFtpXVtib3R0b21dLCBlbmQ9IiAiKQogICAgICAgIHJpZ2h0IC09IDEKCiAgICAgICAgaWYgdG9wIDw9IGJvdHRvbToKICAgICAgICAgICAgIyBQcmludCB0aGUgYm90dG9tIHJvdwogICAgICAgICAgICBmb3IgaSBpbiByYW5nZShyaWdodCwgbGVmdCAtIDEsIC0xKToKICAgICAgICAgICAgICAgIHByaW50KG1hdHJpeFtyaWdodF1baV0sIGVuZD0iICIpCiAgICAgICAgICAgIGJvdHRvbSAtPSAxCgogICAgICAgIGlmIGxlZnQgPD0gcmlnaHQ6CiAgICAgICAgICAgICMgUHJpbnQgdGhlIGxlZnQgY29sdW1uCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGJvdHRvbSwgdG9wIC0gMSwgLTEpOgogICAgICAgICAgICAgICAgcHJpbnQobWF0cml4W2ldW2xlZnRdLCBlbmQ9IiAiKQogICAgICAgICAgICBsZWZ0ICs9IDEKCiMgRXhhbXBsZSB1c2FnZToKbWF0cml4ID0gWwogICAgWzEsIDIsIDMsIDRdLAogICAgWzUsIDYsIDcsIDhdLAogICAgWzksIDEwLCAxMSwgMTJdLAogICAgWzEzLCAxNCwgMTUsIDE2XQpdCgpwcmludF9zcGlyYWwobWF0cml4KQ==