题目链接:
紫书P163.
1、根据16进制图转成2进制图。
每个点dfs一下,马上就把最外围的连通分量编号求出来了为1,这个不是文字里面的空白。
2、求每个文字,四周的空白有多少。——用一个set容器,当你查看这个像素为1 的点,发现四周的点的连通分量编号不同并且不是 1 ,就可以插入到 set 中,set 防止重复。然后这种像素点为 1 对应的字符就是他的 set.size();就是有多少个空。最后对字符排序。
#includeusing namespace std;char bin[256][5];const int maxh = 210;const int maxw = 210;int H,W;int pic[maxh][maxw],color[maxh][maxw];char line[maxw];const int dr[] = {-1,1,0,0};const int dc[] = { 0,0,-1,1};///转成像素点图void decode(char ch,int row,int col){ for(int i=0; i<4; i++) { pic[row][col+i] = bin[ch][i] - '0'; }}void dfs(int row,int col,int c){ color[row][col] = c; for(int i=0; i<4; i++) { int row2 = row + dr[i]; int col2 = col + dc[i]; if(row2>=0&&row2 =0&&col2