"图像压缩算法:删除重复行和列"\n有一个H行W列像素组成的图像, 从上往下数第i行, 从左往右数第j列的像素用ai,j来表示.\n图像只由黑白两种颜色组成,ai,j=0表示黑色, ai,j=1表示白色.现在想要压缩这个图像, 打算按照如下方法压缩:\n如果存在相邻的两行完全一样, 就删除其中一行.如果存在相邻的两列完全一样, 就删除其中一列.重复以上操作直到无法再进行删除为止, 可以证明最终结果和删除顺序无关.\n\n输入\n第一行, 2个整数 H, W.\n接下来H行, 每行W个整数. 表示图像. 0表示黑色,1表示白色, 数与数之间用空格分隔。\n\n输出\n输出压缩后的图像, 数与数之间用空格分隔.\n\n样例输入 复制\n3 3\n1 1 0\n1 1 0\n0 0 1\n样例输出 复制\n1 0\n0 1\n提示\n数据范围:1≤H,W≤50\nC++数组代码内容:cpp\n#include <iostream>\n#include <vector>\nusing namespace std;\n\nint main() {\n int H, W;\n cin >> H >> W;\n vector<vector<int>> image(H, vector<int>(W));\n for (int i = 0; i < H; i++) {\n for (int j = 0; j < W; j++) {\n cin >> image[i][j];\n }\n }\n \n vector<vector<int>> compressedImage;\n compressedImage.push_back(image[0]);\n for (int i = 1; i < H; i++) {\n if (image[i] != image[i-1]) {\n compressedImage.push_back(image[i]);\n }\n }\n \n vector<int> colIndex(W, -1);\n int colCount = 0;\n for (int j = 0; j < W; j++) {\n bool isSame = true;\n for (int i = 1; i < compressedImage.size(); i++) {\n if (compressedImage[i][j] != compressedImage[i-1][j]) {\n isSame = false;\n break;\n }\n }\n if (!isSame) {\n colIndex[j] = colCount;\n colCount++;\n }\n }\n \n for (int i = 0; i < compressedImage.size(); i++) {\n for (int j = 0; j < W; j++) {\n if (colIndex[j] != -1) {\n cout << compressedImage[i][j] << " ";\n }\n }\n cout << endl;\n }\n \n return 0;\n}\n

图像压缩算法:删除重复行和列

原文地址: https://www.cveoy.top/t/topic/qqgS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录