bah bah baaaah
husk kald den nye klasse du laver "main"unknown
plain_text
4 years ago
3.4 kB
6
Indexable
import java.util.Scanner;
public class main {
static int N, M, i, plus = 3; //To keep it simpler
static boolean done;
private static void isDone(int thisNumber, int coord) {
if (thisNumber == 1 && coord >= N * (M - 1)) {
System.out.println(i);
done = true;
System.exit(0);
}
}
private static void changeTheNumbers(int[] stones, int newNumber, int oldNumber) {
for (int j = 0; j < stones.length; j++) {
if (stones[j] == oldNumber) {
stones[j] = newNumber;
isDone(stones[j], j);
}
}
}
private static void checkIfNeighboursNearbyAreLessOrChangeThem(int[] stones, int coord) {
int arrayForLowest[] = new int[4];
if (stones.length > coord + 1 && (coord + 1) % N != 0) { //if there is a right side neighbour and this coord is not at last on the table
arrayForLowest[0] = stones[coord + 1];
}
if(coord-1 > -1) {
if (coord > 0 && (coord % N != 0)) { //if there is a left coord and it is not the first on the table
arrayForLowest[1] = stones[coord - 1];
}
}
if(stones.length > coord + N){ //If there is an under-neighbour
arrayForLowest[2] = stones[coord + N];
}
if(coord - N > -1){ //If there is an upper neighbour
arrayForLowest[3] = stones[coord - N];
}
for (int j = 0; j < arrayForLowest.length; j++) {
if(arrayForLowest[j] < stones[coord] && arrayForLowest[j] != 0){
changeTheNumbers(stones, arrayForLowest[j], stones[coord]);
}
}
for (int j = 0; j < arrayForLowest.length; j++) {
if(arrayForLowest[j] > stones[coord]){
changeTheNumbers(stones, stones[coord], arrayForLowest[j]);
}
}
}
private static void insert(int[] stones, int ni, int mi) {
int coord = mi * N + ni; //These are the coordinates of where to place a number in the array
if (coord < N) {
stones[coord] = 1;
checkIfNeighboursNearbyAreLessOrChangeThem(stones, coord);
}else{
stones[coord] = plus++;
checkIfNeighboursNearbyAreLessOrChangeThem(stones, coord);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
N = scanner.nextInt();
M = scanner.nextInt();
int[] stones = new int[N * M]; //Create array of the length of N*M table
int R = scanner.nextInt();
String[] splitOne = null;
scanner.nextLine(); //To fix a bug
i = 1; //This will eventually be printed at last (rounds of removing stones)
done = false; //To keep in while loop
String Rline[] = new String[R];
for (int i = 0; i < R-1; i++) {
Rline[i] = scanner.nextLine();
}
int j = 0;
while (!done) {
splitOne = Rline[j].split(" ");
int[] splitFinal = new int[2];
splitFinal[0] = Integer.parseInt(splitOne[0]);
splitFinal[1] = Integer.parseInt(splitOne[1]);
insert(stones, splitFinal[0], splitFinal[1]);
j++;
i++;
}
}
}
Editor is loading...