Untitled
unknown
plain_text
a year ago
3.5 kB
13
Indexable
public class HugoDemVung {
public static int N, maxCount, demVung;
public static int[][] map, visited, visited0;
public static int[] count;
public static Queue queue = new Queue();
public static int[] dx = {-1, 0, 1, 0};
public static int[] dy = {0, 1, 0, -1};
public static void bfs() {
queue.reset();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (map[i][j] == 0 && visited[i][j] == 0) {
maxCount = 0;
int index = -1;
visited[i][j] = 1;
queue.enqueue(i);
queue.enqueue(j);
count = new int[6];
while(!queue.isEmpty()) {
int newx = queue.dequeue();
int newy = queue.dequeue();
for (int k = 0; k < 4; k++) {
int nextx = newx + dx[k];
int nexty = newy + dy[k];
if (nextx >= 0 && nextx < N && nexty >= 0 && nexty < N && visited[nextx][nexty] == 0) {
if (map[newx][newy] == 0) {
count[map[nextx][nexty]]++;
queue.enqueue(nextx);
queue.enqueue(nexty);
visited[nextx][nexty] = 1;
}
else {
if (map[nextx][nexty] == map[newx][newy]) {
count[map[nextx][nexty]]++;
queue.enqueue(nextx);
queue.enqueue(nexty);
visited[nextx][nexty] = 1;
}
}
}
}
}
for (int k = 1; k < 6; k++) {
if (maxCount <= count[k]) {
maxCount = count[k];
index = k;
}
}
for (int k = 0; k < N; k++) {
for (int h = 0; h < N; h++) {
if (map[k][h] == 0 && visited[k][h] == 1) {
map[k][h] = index;
visited[k][h]=-1;
}
if (visited[k][h] == 1 && map[k][h] != 0) {
visited[k][h] = 0;
}
}
}
}
}
}
}
public static void bfsDemVung() {
visited = new int[N][N];
queue.reset();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (visited[i][j] == 0) {
visited[i][j] = 1;
demVung++;
queue.enqueue(i);
queue.enqueue(j);
while(!queue.isEmpty()) {
int newx = queue.dequeue();
int newy = queue.dequeue();
for (int k = 0; k < 4; k++) {
int nextx = newx + dx[k];
int nexty = newy + dy[k];
if (nextx >= 0 && nextx < N && nexty >= 0 && nexty < N && visited[nextx][nexty] == 0
&& map[nextx][nexty] == map[newx][newy]) {
queue.enqueue(nextx);
queue.enqueue(nexty);
visited[nextx][nexty] = 1;
}
}
}
}
}
}
}
public static void main(String[] args) throws FileNotFoundException {
System.setIn(new FileInputStream("C:/Users/srv_training/workspace/testabc/src/input.txt"));
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
for (int t1 = 1; t1 <= t; t1++) {
N = sc.nextInt();
map = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
map[i][j] = sc.nextInt();
}
}
// for (int i = 0; i < N; i++) {
// for (int j = 0; j < N; j++) {
// System.out.print(map[i][j] + " ");
// }
// System.out.println();
// }
visited = new int[N][N];
demVung = 0;
bfs();
// System.out.println();
// for (int i = 0; i < N; i++) {
// for (int j = 0; j < N; j++) {
// System.out.print(map[i][j] + " ");
// }
// System.out.println();
// }
bfsDemVung();
System.out.println("Case #" + t1);
System.out.println(demVung);
}
sc.close();
}
}Editor is loading...
Leave a Comment