算法导论 思考题 15-8(基于接缝裁剪的图像压缩)
2017-06-01 18:38
225 查看
#include <stdio.h> #include <stdlib.h> #include <limits.h> #define M 8 #define N 10 int A[M] = { {1,2,3,4,5,6,7,8,9,10}, {2,3,4,5,6,7,8,9,10,11}, {8,4,6,2,7,2,7,8,12,15}, {10,23,5,7,9,10,13,9,18,20}, {4,8,1,9,23,6,8,11,17,30}, {9,5,1,7,5,7,5,19,6,8}, {10,45,7,2,8,2,6,8,2,13}, {10,5,30,29,5,8,6,2,5,20}, }; int B[M] ={0}; int C[M] ={0}; int minOf3(int a,int b,int c) { if(a<=b && a<=c) return a; else if(b<=c) return b; else return c; } int getMin(int i,int j) { int a1,a2,a3; if(j-1>=0) a1=B[i-1][j-1]; else a1=INT_MAX; a2=B[i-1][j]; if(j+1<N) a3=B[i-1][j+1]; else a3=INT_MAX; int min=minOf3(a1,a2,a3); if(min==a1) C[i][j]=-1; else if(min==a2) C[i][j]=0; else C[i][j]=1; return min; } void dp() { for(int i=0;i<M;i++) { for(int j=0;j<N;j++) { B[i][j]=A[i][j]; } } for(int i=1;i<M;i++) { for(int j=0;j<N;j++) { B[i][j]+=getMin(i,j); } } } void printB() { for(int i=0;i<M;i++) { for(int j=0;j<N;j++) { printf("%d ",B[i][j]); } printf("\n"); } } void printA() { for(int i=0;i<M;i++) { for(int j=0;j<N;j++) { printf("%2d ",A[i][j]); } printf("\n"); } } void printTrace(int startCol) { printf("col%d:%d ",startCol+1,A[M-1][startCol]); int j=startCol+C[M-1][startCol]; for(int i=M-2;i>=0;i--) { printf("col%d:%d ",j+1,A[i][j]); j+=C[M-1][j]; } printf("\n"); } int getResult() { int min=INT_MAX,mini; for(int i=0;i<N;i++) { if(B[M-1][i]<min) { min=B[M-1][i]; mini=i; } } printf("min cost:%d\n",min); return mini; } void main() { dp(); //printB(); printA(); int scol=getResult(); printTrace(scol); getchar(); }
相关文章推荐
- 动态规划之基于接缝裁剪的图像压缩
- 算法导论 思考题 15-4(整齐打印)
- 算法导论 思考题 15-9(字符串拆分)
- 算法导论 思考题 15-12(签约棒球自由球员)
- 算法导论 思考题 15-2(最长回文子序列)
- 算法导论思考题答案 思考题15-2 整齐打印
- 算法导论 接缝裁剪
- 算法导论 思考题 15-6(公司聚会计划)
- 算法导论 思考题 15-5a (编辑距离)
- 算法导论 思考题 15-11(库存规划)
- 基于接缝裁剪的图像压缩
- 算法导论 思考题 15-1(有向无环图中的最长简单路径)
- [15]Windows PowerShell DSC学习系列---基于.NET DLL(C#) 定制DSC资源?
- 基于Visual C++2013拆解世界五百强面试题--题15-递归相加
- 计算机图形学-基于OpenGL的直线段的裁剪算法
- 算法导论十二章思考题12-4
- 记录一些简单的暴力破解法带来的思考,基于刘佳汝的书籍例题7.1~7.5
- 算法导论---有序序列中的i个最大数(思考题9-1)
- 基于Flex的裁剪图片功能封装
- 算法导论思考题6-2:d叉堆