有一个N×N的矩阵,其中每个元素都是正整数,且1到N2的正整数恰好名出现一次。
可以将这个短阵按照顺时针螺施的方式组成一个链表:从左上角即(1,1)号格子出发,沿直线走到右上角即(1,N)号格子,再沿直线走到右下角即(N,N)号格子,再沿直线走到左下角即(N,1)号格子,再沿直线走到左上角下方即(2,1)号格子,这就完成了最外面的圈;随后从(2,1)号格子走到(2,2)号格子,接着完成里面的圈,以此类推,直到结束。
同样地,也可以将其按照逆时针螺旋的方式组成一个链表:从左上角即(1,1)号格子出发,沿直线走到左下角即(N,1)号格子,再沿直线走到有下角即(N,N)号格子,再沿直线走到右上角即(1,N)号格子,再沿直线走到左上角右方即(1,2)号格子,这就完成了最外面的圈,随后从(1,2)号格子走到(2,2)号格子,接看完成里面的圈,以此类推,直到结束。
下图给出了3 阶和4 阶矩阵的顺时针链表和逆时针链表的示例。
在本题中,我们需要处理一个 ( N \times N ) 的矩阵,每个元素为正整数,且所有正整数从 ( 1 ) 到 ( N^2 ) 恰好出现一次。给定该矩阵的顺时针遍历的结果,要求输出对应的逆时针遍历结果。输入格式为第一行包含一个整数 ( N ),表示矩阵的大小;第二行输入 ( N^2 ) 个整数,表示顺时针链表中每个元素的值。输出格式为 ( N^2 ) 个整数,表示逆时针链表的元素,以空格分隔.
对于一个大小为n的矩阵,利用一个vis数组先把周围标记墙,从(1,1)开始顺时针(右下左上(循环))模拟走,走过的位置也标记为墙体,碰到墙则进行下一个方向例如(前面一格是墙则反向顺时针旋转90度),一定能走完n*n的矩阵。还原矩阵,同理按逆时针模拟输出即可 整体时间复杂度o(n * n)