c++有一个H行W列像素组成的图像 从上往下数第i行 从左往右数第j列的像素用aij来表示图像只由黑白两种颜色组成aij=0表示黑色 aij=1表示白色现在想要压缩这个图像 打算按照如下方法压缩如果存在相邻的两行完全一样 就删除其中一行如果存在相邻的两列完全一样 就删除其中一列重复以上操作直到无法再进行删除为止 可以证明最终结果和删除顺序无关代码
#include
int main() {
int H, W;
cin >> H >> W;
vector<vector
bool row_deleted = true;
while (row_deleted) {
row_deleted = false;
for (int i = 0; i < H - 1; i++) {
if (pixels[i] == pixels[i + 1]) {
pixels.erase(pixels.begin() + i + 1);
H--;
row_deleted = true;
break;
}
}
}
bool col_deleted = true;
while (col_deleted) {
col_deleted = false;
for (int j = 0; j < W - 1; j++) {
bool same_col = true;
for (int i = 0; i < H; i++) {
if (pixels[i][j] != pixels[i][j + 1]) {
same_col = false;
break;
}
}
if (same_col) {
for (int i = 0; i < H; i++) {
pixels[i].erase(pixels[i].begin() + j + 1);
}
W--;
col_deleted = true;
break;
}
}
}
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
cout << pixels[i][j] << " ";
}
cout << endl;
}
return 0;
原文地址: https://www.cveoy.top/t/topic/fyH5 著作权归作者所有。请勿转载和采集!