1 2 3
4 5 6
7 8 9
1 2
3 4
5 6
#include <stdio.h>
int num[201][201], mark[201][201];
int main(int argc, char ** argv){
int x = 0, y = 0, m, n, i, j, count = 1,sum = 0;
memset(num, 0, sizeof(num));
memset(mark, 0, sizeof(mark));
scanf("%d %d",&m, &n);
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d",&num[i][j]);
}
}
printf("%d ",num[0][0]);
mark[0][0] = 1;
sum++;
while (sum < m*n) {
while (x+1 < m && !mark[x+1][y]) {//检查下一个数组元素是否符合要求
mark[++x][y] = 1;
printf("%d ",num[x][y]);
sum++;
}
while (y+1 < n && !mark[x][y+1]) {//检查下一个数组元素是否符合要求
mark[x][++y] = 1;
printf("%d ",num[x][y]);
sum++;
}
while (x > 0 && !mark[x-1][y]) {//检查下一个数组元素是否符合要求
mark[--x][y] = 1;
printf("%d ",num[x][y]);
sum++;
}
while (y > 0 && !mark[x][y-1] ) {//检查下一个数组元素是否符合要求
mark[x][--y] = 1;
printf("%d ",num[x][y]);
sum++;
}
}
return 0;
}
/*
总结:
1.这道题采用了mark数组来标记某一结点是否被访问
2.注意循环变量的值
*/