给定一个n行m列的二维数组,要求按顺时针螺旋顺序输出矩阵中的所有元素,n和m小于等于10
如下图是一个三行四列的螺旋矩阵

要求输出 1 2 3 4 8 12 11 10 9 5 6 7
- int a[11][11];
- int vis[11][11]; // 访问标记数组
关键代码如下
- int dx[] = {0, 1, 0, -1}; // 行方向
- int dy[] = {1, 0, -1, 0}; // 列方向
- int dir = 0; // dir: 0表示右, 1表示下, 2表示左, 3表示上,是顺时针的方向
- int num = 0;
- int i = 0,j = 0;
-
- while (num < m * n) { //输出完矩阵的所有元素就退出
- if (i >= 0 && i < n && j >= 0 && j < m && vis[i][j] == 0){//不超过边界且未被访问
- printf("%d ", a[i][j]);
- vis[i][j] = 1;
- num++;
- } else { // 否则回退一步,并切换方向
- i -= dx[dir];
- j -= dy[dir];
- dir = (dir + 1) % 4;
- }
- // 更新下一步位置
- i += dx[dir];
- j += dy[dir];
- }
给定矩阵的长度n,要求逆时针输出一个n*n螺旋矩阵
例如输入5,输出如下,要求每个元素间隔四个空格且左对齐,如下图

这题刚好跟上题相反,现在是输出螺旋矩阵,这里螺旋矩阵的方向是逆时针,所以方向向量需要改一下
- int dx[]={1,0,-1,0}; //逆时针是下、右、上、左
- int dy[]={0,1,0,-1};
- int n,i=0,j=0,num=1;
- int dir=0;
- scanf("%d",&n);
- while(num<=n*n){ //num一直加1,然后按顺序赋给数组元素,最后到n*n
- if(i>=0&&i
=0&&j0){ - a[i][j]=num;
- num++;
- visit[i][j]=1;
- }
- else{
- i-=dx[dir];
- j-=dy[dir];
- dir=(dir+1)%4;
- }
- i+=dx[dir];
- j+=dy[dir];
- }
- for(i=0;i
- for(j=0;j
- printf("%-4d",a[i][j]); //隔四个空格且左对齐
- }
- printf("\n");
- }
-
相关阅读:
DFS、BFS详解之二维矩阵路径问题
Java计算不同时区的时差
java毕业设计大学生食堂饭菜价格信息管理系统mybatis+源码+调试部署+系统+数据库+lw
数据挖掘 分类方法
笔试题大疆08.07
unity core-prefab
腾讯插件化框架shadow
一、XSS加解密编码解码工具
Safari浏览器打不开该网址,因为网址无效(解决办法)
怎样选择第三方检测机构获取功能测试报告?
-
原文地址:https://blog.csdn.net/m0_62574258/article/details/140059105