// ラベリング処理 Labeling
//
// author: Leonardone @ NEETSDKASU
//
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
static int[][] map;
static int[] groupLink;
static int nextGroupID = 1;
static int h, w;
static int getGroupID(int x, int y) {
if (x < 0 | x >= w | y < 0 | y >= h) {
return 0;
}
int g = map[y][x];
while (groupLink[g] != g) {
g = groupLink[g];
}
map[y][x] = g;
return g;
}
static void setGroupID(int x, int y) {
int ga = getGroupID(x - 1, y);
int gb = getGroupID(x, y - 1);
if (ga == 0 && gb == 0) {
map[y][x] = nextGroupID;
groupLink[nextGroupID] = nextGroupID;
nextGroupID++;
} else if (ga == 0) {
map[y][x] = gb;
} else if (gb == 0) {
map[y][x] = ga;
} else if (ga < gb) {
groupLink[gb] = ga;
map[y][x] = ga;
} else if (ga > gb) {
groupLink[ga] = gb;
map[y][x] = gb;
}
}
{
Scanner in
= new Scanner
(System.
in);
w = in.nextInt();
h = in.nextInt();
map = new int[h][w];
groupLink = new int[h * w + 1];
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (line.charAt(j) == '1') {
setGroupID(j, i);
}
System.
out.
printf("%02d ", map
[i
][j
]); }
}
Map
<Integer, Character
> groupChar
= new HashMap
<>(); char ch = 'A';
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (g > 0) {
if (groupChar.containsKey(g) == false) {
groupChar.put(g, ch);
ch++;
}
System.
out.
print(groupChar.
get(g
)); } else {
}
}
}
}
}
Ly8g44Op44OZ44Oq44Oz44Kw5Yem55CGIExhYmVsaW5nCi8vCi8vIGF1dGhvcjogTGVvbmFyZG9uZSBAIE5FRVRTREtBU1UKLy8KaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBJZGVvbmUKewoJc3RhdGljIGludFtdW10gbWFwOwoJc3RhdGljIGludFtdIGdyb3VwTGluazsKCXN0YXRpYyBpbnQgbmV4dEdyb3VwSUQgPSAxOwoJc3RhdGljIGludCBoLCB3OwoJCglzdGF0aWMgaW50IGdldEdyb3VwSUQoaW50IHgsIGludCB5KSB7CgkJaWYgKHggPCAwIHwgeCA+PSB3IHwgeSA8IDAgfCB5ID49IGgpIHsKCQkJcmV0dXJuIDA7CgkJfQoJCWludCBnID0gbWFwW3ldW3hdOwoJCXdoaWxlIChncm91cExpbmtbZ10gIT0gZykgewoJCQlnID0gZ3JvdXBMaW5rW2ddOwoJCX0KCQltYXBbeV1beF0gPSBnOwoJCXJldHVybiBnOwoJfQoJCglzdGF0aWMgdm9pZCBzZXRHcm91cElEKGludCB4LCBpbnQgeSkgewoJCWludCBnYSA9IGdldEdyb3VwSUQoeCAtIDEsIHkpOwoJCWludCBnYiA9IGdldEdyb3VwSUQoeCwgeSAtIDEpOwoJCWlmIChnYSA9PSAwICYmIGdiID09IDApIHsKCQkJbWFwW3ldW3hdID0gbmV4dEdyb3VwSUQ7CgkJCWdyb3VwTGlua1tuZXh0R3JvdXBJRF0gPSBuZXh0R3JvdXBJRDsKCQkJbmV4dEdyb3VwSUQrKzsKCQl9IGVsc2UgaWYgKGdhID09IDApIHsKCQkJbWFwW3ldW3hdID0gZ2I7CgkJfSBlbHNlIGlmIChnYiA9PSAwKSB7CgkJCW1hcFt5XVt4XSA9IGdhOwoJCX0gZWxzZSBpZiAoZ2EgPCBnYikgewoJCQlncm91cExpbmtbZ2JdID0gZ2E7CgkJCW1hcFt5XVt4XSA9IGdhOwoJCX0gZWxzZSBpZiAoZ2EgPiBnYikgewoJCQlncm91cExpbmtbZ2FdID0gZ2I7CgkJCW1hcFt5XVt4XSA9IGdiOwoJCX0KCX0KCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJU2Nhbm5lciBpbiA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CgkJCgkJdyA9IGluLm5leHRJbnQoKTsKCQloID0gaW4ubmV4dEludCgpOwoJCQoJCW1hcCA9IG5ldyBpbnRbaF1bd107CgkJZ3JvdXBMaW5rID0gbmV3IGludFtoICogdyArIDFdOwoJCQoJCWZvciAoaW50IGkgPSAwOyBpIDwgaDsgaSsrKSB7CgkJCVN0cmluZyBsaW5lID0gaW4ubmV4dCgpOwoJCQlmb3IgKGludCBqID0gMDsgaiA8IHc7IGorKykgewoJCQkJaWYgKGxpbmUuY2hhckF0KGopID09ICcxJykgewoJCQkJCXNldEdyb3VwSUQoaiwgaSk7CgkJCQl9CgkJCQlTeXN0ZW0ub3V0LnByaW50ZigiJTAyZCAiLCBtYXBbaV1bal0pOwoJCQl9CgkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwoJCX0KCQkKCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKCQkKCQlNYXA8SW50ZWdlciwgQ2hhcmFjdGVyPiBncm91cENoYXIgPSBuZXcgSGFzaE1hcDw+KCk7CgkJY2hhciBjaCA9ICdBJzsKCQkKCQlmb3IgKGludCBpID0gMDsgaSA8IGg7IGkrKykgewoJCQlmb3IgKGludCBqID0gMDsgaiA8IHc7IGorKykgewoJCQkJSW50ZWdlciBnID0gZ2V0R3JvdXBJRChqLCBpKTsKCQkJCWlmIChnID4gMCkgewoJCQkJCWlmIChncm91cENoYXIuY29udGFpbnNLZXkoZykgPT0gZmFsc2UpIHsKCQkJCQkJZ3JvdXBDaGFyLnB1dChnLCBjaCk7CgkJCQkJCWNoKys7CgkJCQkJfQoJCQkJCVN5c3RlbS5vdXQucHJpbnQoZ3JvdXBDaGFyLmdldChnKSk7CgkJCQl9IGVsc2UgewoJCQkJCVN5c3RlbS5vdXQucHJpbnQoJzAnKTsKCQkJCX0KCQkJfQoJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKCQl9Cgl9Cn0=
MTAgMTAKMDAwMDAxMTExMAowMTEwMTAwMTAwCjAxMDAxMTExMDAKMDExMTEwMDExMQowMDAwMDEwMDAxCjAxMDAxMTEwMTEKMDExMTAxMDAxMAowMDAwMDExMDEwCjAwMTExMDEwMTAKMDAwMDAxMTExMAo=
10 10
0000011110
0110100100
0100111100
0111100111
0000010001
0100111011
0111010010
0000011010
0011101010
0000011110