Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.telerikacademy.oop;
- import java.util.Scanner;
- public class Main {
- public static void main(String[] args) {
- Scanner reader = new Scanner(System.in);
- String[] input = reader.nextLine().split(" ");
- int rows = Integer.parseInt(input[0]);
- int cols = Integer.parseInt(input[1]);
- String[][] myStringArr = new String[rows][cols];
- int startingRow=0;
- int startingCol=0;
- for (int i = 0; i <rows ; i++) {
- myStringArr[i] = reader.nextLine().split(" ");
- }
- int[][] grid = new int[rows][cols];
- for (int i = 0; i <rows ; i++) {
- for (int j = 0; j <cols ; j++) {
- grid[i][j] = Integer.parseInt(myStringArr[i][j]);
- if(grid[i][j] == 0){
- startingRow = i;
- startingCol = j;
- grid[i][j] = -1;
- }
- }
- }
- System.out.println(collectedCoins(grid,startingRow,startingCol));
- }
- public static int collectedCoins(int[][] grid,int row, int col){
- int coinCount = 0;
- if(outOfGrid(grid,row,col)){
- return -1;
- }
- if(grid[row][col]==0){
- return -1;
- }
- if(grid[row][col] >0){
- grid[row][col]--;
- }
- boolean left = outOfGrid(grid,row,col-1);
- boolean right = outOfGrid(grid,row,col+1);
- boolean up = outOfGrid(grid,row-1,col);
- boolean down = outOfGrid(grid,row+1,col);
- if(!left && !right && !up && !down && grid[row][col-1] >= grid[row][col+1] && grid[row][col-1] >=
- grid[row-1][col] && grid[row][col-1] >= grid[row+1][col]){
- coinCount += 1 + collectedCoins(grid,row,col-1);
- } else if(!left && !right && !up && !down && grid[row][col+1] >= grid[row][col-1] && grid[row][col+1] >=
- grid[row-1][col] && grid[row][col+1] >= grid[row+1][col]){
- coinCount += 1 + collectedCoins(grid,row,col+1);
- } else if(!left && !right && !up && !down && grid[row-1][col] >= grid[row][col-1] && grid[row-1][col] >=
- grid[row][col+1] && grid[row-1][col] >= grid[row+1][col]){
- coinCount += 1 + collectedCoins(grid,row-1,col);
- } else if(!left && !right && !up && !down && grid[row+1][col] >= grid[row][col-1] && grid[row+1][col] >=
- grid[row][col+1] && grid[row+1][col] >= grid[row-1][col]){
- coinCount += 1 + collectedCoins(grid,row+1,col);
- } else if(!left && !right && !up && down && grid[row][col-1] >= grid[row][col+1] && grid[row][col-1] >=
- grid[row-1][col]){
- coinCount += 1 + collectedCoins(grid,row,col-1);
- } else if(!left && !right && !up && down && grid[row][col+1] >= grid[row][col-1] && grid[row][col+1] >=
- grid[row-1][col]){
- coinCount += 1 + collectedCoins(grid,row,col+1);
- } else if(!left && !right && !up && down && grid[row-1][col] >= grid[row][col-1] && grid[row-1][col] >=
- grid[row][col+1]){
- coinCount += 1 + collectedCoins(grid,row-1,col);
- } else if(!left && !right && up && !down && grid[row][col-1] >= grid[row][col+1] && grid[row][col-1] >=
- grid[row+1][col]){
- coinCount += 1 + collectedCoins(grid,row,col-1);
- } else if(!left && !right && up && !down && grid[row][col+1] >= grid[row][col-1] && grid[row][col+1] >=
- grid[row+1][col]){
- coinCount += 1 + collectedCoins(grid,row,col+1);
- } else if(!left && !right && up && !down && grid[row+1][col] >= grid[row][col-1] && grid[row+1][col] >=
- grid[row][col+1]){
- coinCount += 1 + collectedCoins(grid,row+1,col);
- } else if(!left && right && !up && !down && grid[row][col-1] >= grid[row-1][col] && grid[row][col-1] >=
- grid[row+1][col]){
- coinCount += 1 + collectedCoins(grid,row,col-1);
- } else if(!left && right && !up && !down && grid[row-1][col] >= grid[row][col-1] && grid[row-1][col] >=
- grid[row+1][col]){
- coinCount += 1 + collectedCoins(grid,row-1,col);
- } else if(!left && right && !up && !down && grid[row+1][col] >= grid[row][col-1] && grid[row+1][col] >=
- grid[row-1][col]){
- coinCount += 1 + collectedCoins(grid,row+1,col);
- } else if(left && !right && !up && !down && grid[row][col+1] >= grid[row-1][col] && grid[row][col+1] >=
- grid[row+1][col]){
- coinCount += 1 + collectedCoins(grid,row,col+1);
- } else if(left && !right && !up && !down && grid[row-1][col] >= grid[row][col+1] && grid[row-1][col] >=
- grid[row+1][col]){
- coinCount += 1 + collectedCoins(grid,row-1,col);
- } else if(left && !right && !up && !down && grid[row+1][col] >= grid[row][col+1] && grid[row+1][col] >=
- grid[row-1][col]){
- coinCount += 1 + collectedCoins(grid,row+1,col);
- } else if(!left && !right && up && down && grid[row][col-1] >= grid[row][col+1]){
- coinCount += 1 + collectedCoins(grid,row,col-1);
- } else if(!left && !right && up && down && grid[row][col+1] >= grid[row][col-1]){
- coinCount += 1 + collectedCoins(grid,row,col+1);
- } else if(!left && right && !up && down && grid[row][col-1] >= grid[row-1][col]){
- coinCount += 1 + collectedCoins(grid,row,col-1);
- } else if(!left && right && !up && down && grid[row-1][col] >= grid[row][col-1] ){
- coinCount += 1 + collectedCoins(grid,row-1,col);
- } else if(left && !right && !up && down && grid[row][col+1] >= grid[row-1][col]){
- coinCount += 1 + collectedCoins(grid,row,col+1);
- } else if(left && !right && !up && down && grid[row-1][col] >= grid[row][col+1]){
- coinCount += 1 + collectedCoins(grid,row-1,col);
- } else if(!left && right && up && !down && grid[row][col-1] >= grid[row+1][col]){
- coinCount += 1 + collectedCoins(grid,row,col-1);
- } else if(!left && right && up && !down && grid[row+1][col] >= grid[row][col-1]){
- coinCount += 1 + collectedCoins(grid,row+1,col);
- } else if(left && !right && up && !down && grid[row][col+1] >= grid[row+1][col]){
- coinCount += 1 + collectedCoins(grid,row,col+1);
- } else if(left && !right && up && !down && grid[row+1][col] >= grid[row][col+1]){
- coinCount += 1 + collectedCoins(grid,row+1,col);
- } else if(!left && right && up && down){
- coinCount += 1 + collectedCoins(grid,row,col-1);
- } else if(left && !right && up && down){
- coinCount += 1 + collectedCoins(grid,row,col+1);
- } else if(left && right && !up && down){
- coinCount += 1 + collectedCoins(grid,row-1,col);
- } else if(left && right && up && !down){
- coinCount += 1 + collectedCoins(grid,row+1,col);
- } else {
- coinCount += 1 + collectedCoins(grid,row,col-1);
- coinCount += 1 + collectedCoins(grid,row,col+1);
- coinCount += 1 + collectedCoins(grid,row-1,col);
- coinCount += 1 + collectedCoins(grid,row+1,col);
- }
- return coinCount;
- }
- public static boolean outOfGrid(int[][] grid, int row, int col){
- if (row < 0 || col < 0 || row >= grid.length || col >= grid[0].length){
- return true;
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment