游程编码 (Run Length Encoding ) 是一种简单的编码方法,通常用于控制论中对二值图像编码。ACM有一道题目就是关于该编码。见tzu 1149 或poj 1782 。虽然是简单题,我却花了好大功夫才搞定,功力还是不足阿。
程序代码如下:
#include <stdio.h>
#define MAX 1024
int printStr(char *str, int len);
int main(void)
{
char target[MAX];
int diffCount,sameCount;
char *pFirstChar, *pLastChar;
while(1)
{
if(fgets(target,sizeof(target),stdin) == NULL)
break;
pFirstChar = pLastChar = target;
while(*pLastChar != '\n')
{
diffCount = 0;
sameCount = 1;
/*if(*(pLastChar+1) == '\n')
{
printStr(pLastChar,1);
pLastChar++;
}
else*/
if(*pLastChar == *(pLastChar + 1))
{
while(*pLastChar == *(pLastChar + 1) &&sameCount <= 8)
{
sameCount++;
pLastChar++;
}
printf("%d%c",sameCount,*pLastChar);
pLastChar++;
pFirstChar = pLastChar;
}
else
{
while(*pLastChar != '\n' && *pLastChar != *(pLastChar + 1))
{
diffCount++;
pLastChar++;
}
printStr(pFirstChar,diffCount);
/* printf("\n");*/
pFirstChar = pLastChar;
}
}
if(*pLastChar == '\n')
putchar('\n');
}
return 0;
}
int printStr(char *str, int len)
{
int i;
putchar('1');
for(i = 0; i < len; i++)
if(*(str+i) == '1')
printf("11");
else
putchar(*(str+i));
putchar('1');
return 0;
}
本文介绍了一种简单的编码方法——游程编码,并提供了一个具体的实现案例。通过此方法可以有效地压缩二值图像数据,适用于控制论领域。文章详细展示了如何使用C语言实现游程编码的过程。
1万+

被折叠的 条评论
为什么被折叠?



