1 条题解
-
0
思路与算法
按从上到下、从左到右的顺序读取矩阵;读到非零值立即输出其1-based行号、列号和数值。无需存储整个矩阵。
正确性说明
读取顺序已经是要求的行列顺序;每个单元恰访问一次,零值不输出,非零值恰输出一个三元组。因此三元组集合既不遗漏也不重复,按这些坐标还原即可恢复原矩阵。
复杂度
读取nm个元素,时间O(nm);初始化O(1),额外空间O(1),不计输出缓冲。
易错点
不要在首行额外输出非零数目。行列从1开始。全零矩阵输出空内容,不能输出0。输入允许0,所谓正整数限定的是非零元素。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { int n, m; cin >> n >> m; for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) { int x; cin >> x; if (x) cout << i << ' ' << j << ' ' << x << "\n"; } }
- 1