/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static int n,m;
static boolean lock[ ] [ ] ;
static int map[ ] [ ] ;
{
int map[ ] [ ] = { { 0 ,1 ,0 ,0 ,0 ,1 ,0 ,0 } ,{ 0 ,1 ,0 ,1 ,0 ,1 ,0 ,0 } ,{ 0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 } ,{ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 } ,{ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 } ,{ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 } ,{ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 } ,{ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 } } ;
/*{{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};*/
//{{0,1,1,1,1,0,0,0},{0,0,0,0,0,1,1,0}};
//{{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}};
//{{0,1,0,0,0,1,0,0},{0,1,0,1,0,1,0,0},{0,0,0,1,0,0,0,0},{1,1,1,1,1,1,1,0},{1,1,1,1,1,1,1,0},{1,1,1,1,1,1,1,0},{1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,0}};
//{{0, 1, 1, 0}, {0, 0, 0, 1}, {1, 1, 0, 0}, {1, 1, 1, 0}};
//{{0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0}};
System .
out .
println ( solution
( map
) ) ; }
public static int solution( int [ ] [ ] map) {
n = map.length ;
m = map[ 0 ] .length ;
lock = new boolean [ n] [ m] ;
Ideone.map = map;
return findPath( 0 ,0 ,0 ,false ) ;
}
public static int findPath( int x,int y,int length,boolean barrierRemoved) {
if ( x== n- 1 && y== m- 1 )
return length+ 1 ;
if ( ! ( x>= 0 && x< n&& y>= 0 && y< m) )
//System.out.println(x+","+y);
if ( lock[ x] [ y] )
if ( map[ x] [ y] == 1 && barrierRemoved)
lock[ x] [ y] = true ;
if ( map[ x] [ y] == 1 )
barrierRemoved = true ;
int northPathLength = findPath( x+ 1 ,y,length+ 1 ,barrierRemoved) ;
int southPathLength = findPath( x- 1 ,y,length+ 1 ,barrierRemoved) ;
int eastPathLength = findPath( x,y+ 1 ,length+ 1 ,barrierRemoved) ;
int westPathLength = findPath( x,y- 1 ,length+ 1 ,barrierRemoved) ;
lock[ x] [ y] = false ;
return Math .
min ( northPathLength,
Math .
min ( southPathLength,
Math .
min ( eastPathLength,westPathLength
) ) ) ;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCQoJc3RhdGljIGludCBuLG07CglzdGF0aWMgYm9vbGVhbiBsb2NrW11bXTsKCXN0YXRpYyBpbnQgbWFwW11bXTsKCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJaW50IG1hcFtdW10gPSB7ezAsMSwwLDAsMCwxLDAsMH0sezAsMSwwLDEsMCwxLDAsMH0sezAsMCwwLDEsMCwwLDAsMH0sezEsMSwxLDEsMSwxLDEsMH0sezEsMSwxLDEsMSwxLDEsMH0sezEsMSwxLDEsMSwxLDEsMH0sezEsMSwxLDEsMSwxLDEsMX0sezEsMSwxLDEsMSwxLDEsMH19OwoJCQoJCS8qe3swLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9LAoJCXswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9fTsqLwoJLy97ezAsMSwxLDEsMSwwLDAsMH0sezAsMCwwLDAsMCwxLDEsMH19OwoJLy97ezAsMCwwLDAsMCwwLDAsMH0sezAsMCwwLDAsMCwwLDAsMH0sezAsMCwwLDAsMCwwLDAsMH0sezAsMCwwLDAsMCwwLDAsMH0sezAsMCwwLDAsMCwwLDAsMH0sezAsMCwwLDAsMCwwLDAsMH0sezAsMCwwLDAsMCwwLDAsMH0sezAsMCwwLDAsMCwwLDAsMH19OwoJLy97ezAsMSwwLDAsMCwxLDAsMH0sezAsMSwwLDEsMCwxLDAsMH0sezAsMCwwLDEsMCwwLDAsMH0sezEsMSwxLDEsMSwxLDEsMH0sezEsMSwxLDEsMSwxLDEsMH0sezEsMSwxLDEsMSwxLDEsMH0sezEsMSwxLDEsMSwxLDEsMX0sezEsMSwxLDEsMSwxLDEsMH19OwoJLy97ezAsIDEsIDEsIDB9LCB7MCwgMCwgMCwgMX0sIHsxLCAxLCAwLCAwfSwgezEsIDEsIDEsIDB9fTsKCS8ve3swLCAwLCAwLCAwLCAwLCAwfSwgezEsIDEsIDEsIDEsIDEsIDB9LCB7MCwgMCwgMCwgMCwgMCwgMH0sIHswLCAxLCAxLCAxLCAxLCAxfSwgezAsIDEsIDEsIDEsIDEsIDF9LCB7MCwgMCwgMCwgMCwgMCwgMH19OwoJCglTeXN0ZW0ub3V0LnByaW50bG4oc29sdXRpb24obWFwKSk7Cgl9CgkKCQoJIHB1YmxpYyBzdGF0aWMgaW50IHNvbHV0aW9uKGludFtdW10gbWFwKSB7CgkgCQoJIAluID0gbWFwLmxlbmd0aDsKICAgICAgICBtID0gbWFwWzBdLmxlbmd0aDsKICAgICAgICBsb2NrID0gbmV3IGJvb2xlYW5bbl1bbV07CiAgICAgICAgSWRlb25lLm1hcCA9IG1hcDsKICAgICAgICAKICAgICAgICByZXR1cm4gZmluZFBhdGgoMCwwLDAsZmFsc2UpOwogICAgICAgIAoJIAkKCSB9CgkgCgkgcHVibGljIHN0YXRpYyBpbnQgZmluZFBhdGgoaW50IHgsaW50IHksaW50IGxlbmd0aCxib29sZWFuIGJhcnJpZXJSZW1vdmVkKXsKCSAJCgkgCWlmKHg9PW4tMSYmeT09bS0xKQoJIAlyZXR1cm4gbGVuZ3RoKzE7CgkgCQoJIAlpZighKHg+PTAmJng8biYmeT49MCYmeTxtKSkKCSAJcmV0dXJuIEludGVnZXIuTUFYX1ZBTFVFOwoJIAkKCSAJLy9TeXN0ZW0ub3V0LnByaW50bG4oeCsiLCIreSk7CgkgCQoJIAlpZihsb2NrW3hdW3ldKQoJIAlyZXR1cm4gSW50ZWdlci5NQVhfVkFMVUU7CgkgCQoJIAlpZihtYXBbeF1beV09PTEmJmJhcnJpZXJSZW1vdmVkKQoJIAlyZXR1cm4gSW50ZWdlci5NQVhfVkFMVUU7CgkgCQoJIAlsb2NrW3hdW3ldID0gdHJ1ZTsKCSAJaWYobWFwW3hdW3ldPT0xKQoJIAliYXJyaWVyUmVtb3ZlZCA9IHRydWU7CgkgCQoJIAkKCSAJCgkgCWludCBub3J0aFBhdGhMZW5ndGggPSBmaW5kUGF0aCh4KzEseSxsZW5ndGgrMSxiYXJyaWVyUmVtb3ZlZCk7CgkgCQoJIAlpbnQgc291dGhQYXRoTGVuZ3RoID0gZmluZFBhdGgoeC0xLHksbGVuZ3RoKzEsYmFycmllclJlbW92ZWQpOwoJIAkKCSAJaW50IGVhc3RQYXRoTGVuZ3RoID0gZmluZFBhdGgoeCx5KzEsbGVuZ3RoKzEsYmFycmllclJlbW92ZWQpOwoJIAkKCSAJaW50IHdlc3RQYXRoTGVuZ3RoID0gZmluZFBhdGgoeCx5LTEsbGVuZ3RoKzEsYmFycmllclJlbW92ZWQpOwoJIAoJCWxvY2tbeF1beV0gPSBmYWxzZTsKCSAKCSAJcmV0dXJuIE1hdGgubWluKG5vcnRoUGF0aExlbmd0aCxNYXRoLm1pbihzb3V0aFBhdGhMZW5ndGgsTWF0aC5taW4oZWFzdFBhdGhMZW5ndGgsd2VzdFBhdGhMZW5ndGgpKSk7CgkgCQoJIH0KCQp9