题意:给定一个黑白图片的16进制表示,识别出图片中包含的象形文字。
首先需要把十六进制表示转化为二进制表示。因为每个象形文字的黑色像素是连通的,所以黑色像素的连通分量的数目即为象形文字的数目。各象形文字可以用其包含的白色区域的数目来区别。想到的做法是,dfs填充白色像素区域,并返回区域的边界:0 表示没有边界(边界都是白色像素),1,2,3… 表示边界是对应的黑色连通分量,-1 表示边界是整个图像的边界。若边界是黑色像素,则对应的黑色连通分量包含的白色区域数+1。这样,即可区分出不同的象形文字。
一个想错的地方是,认为返回的区域边界不会为0。想象这样一种情况,一个白色像素其周围的三个白色像素都已经遍历到,则返回0。而这种情况是有可能的。
紫书中的做法是增加了白色边界,方便处理;从黑色区域找与其相连的白色区域。
1 |
|