题目描述
已知一个n*m的矩阵,希望你能按照下图所示的规律进行遍历,并把遍历的结果输出。
对于如图,遍历的结果为:
1 4 2 3 5 7 8 6 9
输入
多组数据
每组数据第一行输入n,m(1<=n,m<=50),表示矩阵的大小。
接下来n行,每行包括m个正整数,表示矩阵每行m个元素。
输出
输出遍历结果,并换行
--正文
直接模拟就好了,为了方便起见,开一个比较大的矩阵,来一些辅助的0
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int rect[1000][1000]; int visit[1000][1000]; int main(){ int n,m; while (scanf("%d %d",&n,&m) != EOF){ memset(rect,0,sizeof(rect)); memset(visit,0,sizeof(visit)); int i,j; for (i=1;i<=n;i++){ for (j=1;j<=m;j++){ scanf("%d",&rect[i][j]); } } int nowx = 1,nowy = 1; int nowd = 1; // 1 down 2 right-up 3 right 4 left-down visit[1][1] = 1; printf("%d",rect[1][1]); while ( true ){ if (rect[nowy][nowx] != 0 && !visit[nowy][nowx]) printf(" %d",rect[nowy][nowx]); visit[nowy][nowx] = 1; if (nowy == n && nowx == m) break; if (nowd == 1) { nowy ++; nowd = 2; continue; } if (nowd == 2) { if (nowy > 1) { nowx ++; nowy --; continue; } else { nowd = 3; continue; } } if (nowd == 3) { nowx ++; nowd = 4; continue; } if (nowd == 4) { if (nowx > 1) { nowx --; nowy ++; continue; } else { nowd = 1; continue; } } } printf("\n"); } return 0; }