数组环形扫描
来源:互联网 发布:软件汉化 编辑:程序博客网 时间:2024/05/16 13:50
在每次扫描结束的时候,更新当前矩形的边际即可
#include <stdio.h>#include <stdlib.h>#include <assert.h>int * newIntRaw(int n){ return (int *)malloc(sizeof(int) * n);}int ** newMap(int n, int m){ int i; int **res = (int **)malloc(sizeof(int *) * n); for (i = 0; i < n; ++i) res[i] = newIntRaw(m); return res;}// ------------solve----------int **map;int n, m;int left = 0, right = 0, up = 0, down = 0;void solve(){ int i; while (1) { if (left > right || up > down) break; for (i = up; i <= down; ++i) { printf("%d ", map[i][left]); } left++; if (left > right || up > down) break; for (i = left; i <= right; ++i) { printf("%d ", map[down][i]); } down--; if (left > right || up > down) break; for (i = down; i >= up; --i) { printf("%d ", map[i][right]); } right--; if (left > right || up > down) break; for (i = right; i >= left; --i) { printf("%d ", map[up][i]); } up++; }}int main(){ int i, j; // init scanf("%d %d", &n, &m); map = newMap(n, m); for (i = 0; i < n; i++) { for (j = 0; j < m; ++j) { scanf("%d", &map[i][j]); } } left = 0, right = m - 1, up = 0, down = n - 1; solve(); return 0;}/*5 51 16 15 14 132 17 24 23 123 18 25 22 124 19 29 21 105 6 7 8 9*/
阅读全文
0 0
- 数组环形扫描
- 环形数组例程
- java 环形数组缓冲区
- 环形数组删除问题
- java环形打印二维数组
- 环形队列的数组实现
- POJ 1509 环形后缀数组
- 数组实现的 环形队列
- 环形
- 使用静态“环形”数组建立一个队列
- 环形缓冲区(JAVA数组实现)
- 环形缓冲区(JAVA数组实现)
- 二维数组环形打印,亲自调试
- 环形数组的最大连续和
- 算法-一种数组环形队列的数据结构
- 打印回型数组 回型矩阵 环形数组
- 打印回型数组-回型矩阵-环形数组
- 数组排序,无须二次扫描
- JavaScript 遍历方法总结 forEach some every filter map includes
- 学习笔记31-C/C++字符串输入
- PHP修改图片大小的实现方法
- 崔雪莉个人介绍
- JAVA 类名.class是什么意思?
- 数组环形扫描
- uva10815 sstream文本读入模板
- 动态规划——Floyd最短路径算法
- 图论总结 Dijkstra Tarjan 最小生成树 二分图 最短路 强连通分量 双连通分量 Bellman-Ford SPFA 二分图染色 Kruskal Prim 网络流 二分图匹配 Dinic
- 垃圾回收的优点和原理 并考虑2种回收机制
- windows系统文件名太长导致无法打开删除移动
- 从开源项目,入坑Kotlin
- MyBatis Generator生成DAO——序列化
- 值得膜拜的三个数据分析案例