蛇形矩阵
来源:互联网 发布:以下不是云计算的特点 编辑:程序博客网 时间:2024/06/06 08:43
今天看到一个比较有趣的问题,输入一个整数n,输出一个n*n的矩阵,矩阵是逆时针方向增长的蛇形矩阵。这到底是个什么矩阵呢?举例来说:输入3,输出应该是
1 2 3 8 9 4 7 6 5
我的思路就是按照逆时针的方向来增大矩阵,num从1一直增大到n*n为止,增长方向由right,down,left,up4个bool值来控制,同时还设置了4个边界来控制i和j的终止范围,代码写得并不好,思路太过原始,变量也多,应该有一些简单的算法,不过暂时想把我这种思路记录下来吧,附代码:
#include<iostream>#include<iomanip>using namespace std;const int MAX = 10000;int a[MAX][MAX];//逆时针增加的蛇形矩阵 void snake(int N){ bool right = true, down = false, left = false, up = false; //4个方向 int startOfI = 0, startOfJ = 0; //4个边界 int boundOfJRight = N, boundOfJLeft = 0; int boundOfIBottom = N, boundOfITop = 0; //i和j的起始位置 int i = startOfI, j = startOfJ; int num = 0; while(num < N*N){ //先向右增加 if(right){ for(j = startOfJ; j < boundOfJRight; j++){ num++; a[startOfI][j] = num; cout << "第" << startOfI << "行\t第" <<j << "列" << num << endl; } right = !right; down = !down; startOfJ = j-1; startOfI++; //向右增加完成后,顶层肯定会铺满一层,所以顶层边界要加1 boundOfITop++; } //向下 if(down){ for(i = startOfI; i < boundOfIBottom; i++){ num++; a[i][startOfJ] = num; cout << "第" << i << "行\t第" << startOfJ << "列" << num << endl; } down = !down; left = !left; startOfI = i-1; startOfJ--; //同理,向下增加完成后,右边肯定会铺满一列,所以右边边界要减1 boundOfJRight--; } //向左 if(left){ for(j = startOfJ; j >= boundOfJLeft; j--){ num++; a[startOfI][j] = num; cout << "第" << startOfI << "行\t第" <<j << "列" << num << endl; } left = !left; up = !up; startOfJ = j+1; startOfI--; //向左增加完成后,底层肯定会铺满一层,所以底层边界要减1 boundOfIBottom--; } //向上 if(up){ for(i = startOfI; i >= boundOfITop; i--){ num++; a[i][startOfJ] = num; cout << "第" << i << "行\t第" << startOfJ << "列" << num << endl; } up = !up; right = !right; startOfI = i+1; startOfJ++; //向上增加完成后,左边肯定会铺满一列,所以左边边界要加1 boundOfJLeft++; } } //打印 for(int k = 0; k < N; k++){ for(int p = 0; p < N; p++){ cout <<setw(5) << a[k][p] ; } cout << endl; }}int main(){ int n; cin >> n; snake(n);}
运行结果示例:
n = 6
1 0
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 蛇形矩阵
- 动态代理
- ESP8266 Mesh发包流程介绍
- 关于开通个人技术博客的决定
- Elasticsearch JAVA API 学习
- 2016/9/1 1 Word Reversal
- 蛇形矩阵
- Mac eclipse快捷键
- python元类(metaclass)浅谈
- ios开发-3D折叠菜单的简单实现
- 我做服务器的岁月7
- WAF绕过的一些技巧 LoveSec
- cargo, maven插件cargo实现自动部署
- 《图数据库》(人民邮电出版社)读书笔记五、六
- B.Sliding Window(poj2823)