面试训练顺时针打印矩阵
2012-09-01 15:06
211 查看
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。
今天中午没有睡午觉,头晕的啊不行。看海涛的递归看了好久没反应,自己思路和他的基本一致,主要的问题就是 边界条件的处理上面有问题。头昏所以先放放。
看到下面一个网友的评论中,采用四个边界来固定遍历,即左边界,右边界,上边界,下边界,无外乎就在这四个边界中移动,如果出现边界重合即退出。
例如:如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。
今天中午没有睡午觉,头晕的啊不行。看海涛的递归看了好久没反应,自己思路和他的基本一致,主要的问题就是 边界条件的处理上面有问题。头昏所以先放放。
看到下面一个网友的评论中,采用四个边界来固定遍历,即左边界,右边界,上边界,下边界,无外乎就在这四个边界中移动,如果出现边界重合即退出。
#include "stdio.h" int main() { int upbound,downbound,leftbound,rightbound; int data[3][3] ={ {1,2,3}, {5,6,7}, {8,9,10}, }; int row,col; enum dir{right,down,left,up} direction; row =0; col =0; direction = right; upbound =leftbound =0; rightbound=3-1; downbound = 3-1; while(1) { printf("%d ",data[row][col]); if(direction == right) { if(col <rightbound) { ++col; } else { if(upbound == downbound) { break; } ++row; direction = down; ++upbound; } } else if(direction == down) { if(row < downbound) { ++row; } else { if(leftbound == rightbound) { break; } --col; direction = left; --rightbound; } } else if(direction == left) { if(leftbound <col) { --col; } else { if(upbound == downbound) { break; } --row; direction = up; --downbound; } } else if(direction == up) { if(upbound <row) { --row; } else { if(leftbound == rightbound) { break; } ++col; direction = left; ++leftbound; } } } return 0; }
相关文章推荐
- 顺时针打印出矩阵(面试编程或者上机题)
- [面试金典]顺时针打印矩阵
- 面试算法(十九)顺时针打印矩阵
- 【剑指Offer面试编程题】题目1391:顺时针打印矩阵--九度OJ
- 【剑指Offer面试编程题】题目1391:顺时针打印矩阵--九度OJ
- 面试常备题(三)----顺时针打印矩阵
- 顺时针打印矩阵(面试宝典)
- 剑指offer:顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- 剑指offer面试题[20]-顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 九度 题目1391:顺时针打印矩阵
- 【算法06】顺时针打印矩阵
- 剑指offe:顺时针打印矩阵(最优解)——Array
- 顺时针打印矩阵
- 20_顺时针打印矩阵
- 剑指offer--面试题20:顺时针打印矩阵--Java实现
- 面试题20—顺序打印矩阵
- 面试训练打印数组
- 顺时针打印矩阵