蜗牛——矩阵顺时针遍历
来源:互联网 发布:开淘宝怎么开 编辑:程序博客网 时间:2024/06/04 18:24
题目:输入一个矩阵,按照从外向里以顺时针顺序依次打印出每一个数字,例如:如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
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。
/*算法思想:由于是循环方向数字加一,故可以考虑把它右、下、左、上看成一个周期。一层就是一个周期。而每层/周期的的每个方向的尽头是有规律的。direction用来表示判断方向,依次为右、下、左、上。control(初始值为0)用来体现周期和层数,在尽头中会起作用 当方向为右时,i不变,++j,对应尽头(列)=n-1-control,依次为n-1,n-2,...,n-1-control,...当方向为下时,j不变,++i,对应尽头(行)=n-1-control,依次为n-1,n-2,.....,n-1-control,...当方向为左时,i不变,--j,对应尽头(列)=control,依次为0,1,....,control,....当方向为上时,j不变,--i,对应尽头(行)=control+1,依次为1,2,3,...,control+1,....由于方向依次为右、下、左、上,所以,direction初始值为1,即向右开始的。那么,右对应direction%4==1,下对应direction%4==2,依次类推。总的过程是先写当前这个,后探明下一个的方向*/#include<stdio.h>int num[50][50];int main(){int n,startnum,control=0,direction=1,i=0,j=0;printf("input n(0-50)");scanf("%d",&n);startnum=1;num[i][j]=startnum; //从num[i][j]开始while(startnum<n*n){switch(direction%4){case 1: ++j;//右 if(j==n-1-control)direction++; //到达尽头,要换方向 break;case 2: ++i;//下if(i==n-1-control)direction++;break;case 3:--j;//左if(j==control)direction++;break;case 0:--i;//上if(i==control+1) //此时表示一个周期或层数的结束{direction++;control++;} break;}//end switchnum[i][j]=++startnum; }//end while//输出二维数组for(i=0;i<n;i++){for(j=0;j<n;j++){printf("%4d",num[i][j]);}printf("\n");}//end for}//end main
方法二:
#include <IOSTREAM>#include <IOMANIP>using namespace std;int main(){int num[50][50] = {0};memset(num, 0, sizeof(num));int n = 0,j = 0,i = 0,stratnum = 1;cout << "请输入数字(0-5):";cin >> n;while (i<n && j<n && num[i][j] == 0 ){while (j< n && num[i][j] == 0 ){num[i][j++] = stratnum ++;}++i;--j;while (i<n && num[i][j] == 0 ){num[i++][j] = stratnum++;}--i;--j;while (j>=0 && num[i][j] == 0){num[i][j--] = stratnum++;}j++;i--;while (i>=0 && num[i][j] == 0){num[i--][j] = stratnum++;}i++;j++;}for (i=0 ; i<n; ++i){for (j=0; j<n; ++j)cout << setw(4) << num[i][j] ;cout << endl;}return 0;}
0 0
- 蜗牛——矩阵顺时针遍历
- java顺时针遍历矩阵
- 《剑指offer》——顺时针打印矩阵
- 《剑指offer》——顺时针打印矩阵
- 经典算法——顺时针打印矩阵
- 剑指offer——顺时针打印矩阵
- 剑指offer——顺时针打印矩阵
- 牛客网——顺时针旋转矩阵
- 剑指offer——顺时针打印矩阵
- 剑指offer——顺时针打印矩阵
- 剑指offer——顺时针打印矩阵
- 编程练习——顺时针打印矩阵
- 顺时针打印矩阵——20
- 剑指offer—顺时针打印矩阵
- 剑指offer(19)—顺时针打印矩阵
- 剑指offer——面试题20:顺时针打印矩阵
- 剑指offer——矩阵顺时针输出问题
- 剑指Offer——(19)顺时针打印矩阵
- 多路视频编解码(零散知识点记录)
- mysql快速入门
- [2048源码分析-1]游戏架构
- ANSI Common Lisp 第六章习题解
- LA 3027
- 蜗牛——矩阵顺时针遍历
- 自定义异常及其处理
- JVM如何操作缓冲区
- Template Method模式和Strategy模式有何异同
- Split()说明
- C++ MFC combo box和list control控件的使用
- java反射机制详解 及 Method.invoke解释 getMethod
- Ubuntu14.04建立WiFi热点
- LeetCode-Distinct Subsequences