【发布时间】:2017-10-19 07:13:32
【问题描述】:
我正在尝试完成一个简单的基本程序,该程序模仿用于使用递归进行图像压缩的算法。 我有一个 n x n 矩阵,其中 n 始终是 2 的幂。这是因为我们可以将矩阵拆分为 4 n/2 * n/2 其他矩阵。 有两种基本情况:
- 当矩阵为 1x1 时,只需返回该位置内的值。
- 当 n x n 块内的所有值都相等时,打印 1x,其中 x 是公共值
递归情况是当我们有不同的值时。在这种情况下,我们打印 0 并将矩阵划分为其他四个 n/2 x n/2 矩阵。
这些区域按顺时针顺序递归处理,从左上角区域开始。
例子:
8
..**....
..**....
**......
**......
........
........
......*.
......*.
答案:001.1*1.1*1.01.1.0*..*1.1.
我的问题是我的代码中缺少一个案例,因此我的答案与预期结果并不完全匹配。
这是我的代码:
void computeComressor(char** arr,int m,int x,int y){
int i,j;
int flag=1;
char c=arr[x][y];
if(m==1){
printf("%c",c);
return;
}
for(i=x;i<m-x*y;i++){
for(j=y;j<m-x*y;j++){
if(arr[i][j]==c){
continue;
}
else{
flag=0;
break;
}
}
}
if(flag==1){
printf("1%c",c);
}
else{
printf("0");
computeComressor(arr,m/2,x,y);
computeComressor(arr,m/2,x,m/2);
computeComressor(arr,m/2,m/2,m/2);
computeComressor(arr,m/2,m/2,y);
}
}
【问题讨论】: