有这么一个矩阵,例如
anml
bopk
cfuc
要螺旋着读,例如:
abcfucklmnop
再或者
anmlkcufcbop
也就是
1 2 3 4
8 7 6 5
9 10 11 12
按照1->2->3->4->5->12->11->10->9->8->7->6这样螺旋来读
假如就按照以上这种方法读入,可以发现,其实方向是循环的:
向右->向下->向左->向上->向右->…………
不妨可以用一个这种枚举来形象化记录方向
enum direction {left , right , down , up} now = right ;
now = down ;
下面是完整的代码:
#include <stdio.h>
int main () {
int row , col ;
enum direct {left , right , up , down} now = right ;
int r = 0 , c = 0 ;
scanf ("%d %d" , &row , &col) ;
getchar () ;
char ch[row][col] ;
int book[row][col] ;
char a[row*col] ;
for (int i = 0 ; i < row ; i ++) {
for (int j = 0 ; j < col; j ++) {
scanf ("%c" , &ch[i][j]) ;
book[i][j] = 0 ;
}
getchar () ;
}
for (int i = 0 ; i < row*col ; i ++) {
a[i] = ch[r][c] ;
book[r][c] = 1 ;
if (now == right) {
c ++ ;
if (c + 1 == col || (c + 1 < col && book[r][c + 1]))
now = down ;
}
else if (now == down) {
r ++ ;
if (r + 1 == row || (r + 1 < row && book[r + 1][c]))
now = left ;
}
else if (now == left) {
c -- ;
if (c == 0 || (c > 0 && book[r][c - 1]))
now = up ;
}
else if (now == up) {
r -- ;
if (r == 0 || (r > 0 && book[r - 1][c]))
now = right ;
}
}
for (int i = 0 ; i < row*col ; i ++)
printf ("%c" , a[i]) ;
printf ("\n") ;
return 0 ;
}