#include <iostream>
#include <cstdio>
#define MAX_Y 10
#define MAX_X 12
using namespace std;
int walk(int [MAX_Y][MAX_X],int ,int );
void print(int [MAX_Y][MAX_X]);
int step=0;
int main(int argc, char *argv[]){
int map[MAX_Y][MAX_X] = {1,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,0,1,1,1,1,1,1,1,1,
1,1,1,0,1,1,0,0,0,0,1,1,
1,1,1,0,1,1,0,1,1,0,1,1,
1,1,1,0,0,0,0,1,1,0,1,1,
1,1,1,0,1,1,0,1,1,0,1,1,
1,1,1,0,1,1,0,1,1,0,1,1,
1,1,1,1,1,1,0,1,1,0,1,1,
1,1,0,0,0,0,0,0,1,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1}; //1 is wall, 0 is road.
printf("Map:\n");
print(map);
int sx=1,sy=1;
walk(map,sx,sy);
printf("\nResult:\n");
print(map);
printf("step count=%d",step);
return 0;
}
int walk(int m[MAX_Y][MAX_X],int x, int y){
if(m[y][x]==0 && m[MAX_Y-2][MAX_X-2]!=2){
m[y][x]=2; //walking
step++;
if(m[MAX_Y-2][MAX_X-2]!=2){
//printf("m[%d][%d]=%d ",y,x,m[y][x]); //Test
if((!(walk(m,x+1,y)==0 || //right
walk(m,x,y+1)==0 || //down
walk(m,x-1,y)==0 || //left
walk(m,x,y-1)==0)) && //up //if don't walking
m[MAX_Y-2][MAX_X-2]!=2){
m[y][x]=0;
step--;
return 1;
}
else
return m[y][x];
}
}
}
void print(int m[MAX_Y][MAX_X]){
for(int i=0;i<MAX_Y;i++){
for(int j=0;j<MAX_X;j++){
if(j!=0)
printf(",");
printf("%d",m[i][j]);
}
printf("\n");
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojZGVmaW5lIE1BWF9ZIDEwCiNkZWZpbmUgTUFYX1ggMTIKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgd2FsayhpbnQgW01BWF9ZXVtNQVhfWF0saW50ICxpbnQgKTsKdm9pZCBwcmludChpbnQgW01BWF9ZXVtNQVhfWF0pOwoKaW50IHN0ZXA9MDsKCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pewoJaW50IG1hcFtNQVhfWV1bTUFYX1hdID0gezEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLCAgCgkJCQkJCQkxLDAsMCwwLDEsMSwxLDEsMSwxLDEsMSwKCQkJCQkJCTEsMSwxLDAsMSwxLDAsMCwwLDAsMSwxLAoJCQkJCQkJMSwxLDEsMCwxLDEsMCwxLDEsMCwxLDEsICAKCQkJCQkJCTEsMSwxLDAsMCwwLDAsMSwxLDAsMSwxLCAgCgkJCQkJCQkxLDEsMSwwLDEsMSwwLDEsMSwwLDEsMSwgIAoJCQkJCQkJMSwxLDEsMCwxLDEsMCwxLDEsMCwxLDEsICAKCQkJCQkJCTEsMSwxLDEsMSwxLDAsMSwxLDAsMSwxLCAgCgkJCQkJCQkxLDEsMCwwLDAsMCwwLDAsMSwwLDAsMSwgIAoJCQkJCQkJMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDF9OwkJLy8xIGlzIHdhbGwsIDAgaXMgcm9hZC4KCQoJcHJpbnRmKCJNYXA6XG4iKTsKCXByaW50KG1hcCk7CQoJaW50IHN4PTEsc3k9MTsKCXdhbGsobWFwLHN4LHN5KTsKCXByaW50ZigiXG5SZXN1bHQ6XG4iKTsKCXByaW50KG1hcCk7CQoJcHJpbnRmKCJzdGVwIGNvdW50PSVkIixzdGVwKTsKCQoJcmV0dXJuIDA7Cn0KCmludCB3YWxrKGludCBtW01BWF9ZXVtNQVhfWF0saW50IHgsIGludCB5KXsKCWlmKG1beV1beF09PTAgJiYgbVtNQVhfWS0yXVtNQVhfWC0yXSE9Mil7CgkJCgkJbVt5XVt4XT0yOwkJCQkJCQkvL3dhbGtpbmcKCQlzdGVwKys7CgkJCgkJaWYobVtNQVhfWS0yXVtNQVhfWC0yXSE9Mil7CQkKCQkJLy9wcmludGYoIm1bJWRdWyVkXT0lZCAiLHkseCxtW3ldW3hdKTsgIC8vVGVzdAoJCQlpZigoISh3YWxrKG0seCsxLHkpPT0wICB8fCAJCQkvL3JpZ2h0CgkJCQl3YWxrKG0seCx5KzEpPT0wICB8fAkJCS8vZG93bgoJCQkJd2FsayhtLHgtMSx5KT09MCAgfHwJCQkvL2xlZnQKCQkJCXdhbGsobSx4LHktMSk9PTApKSAmJgkJCS8vdXAJCS8vaWYgZG9uJ3Qgd2Fsa2luZwoJCQkJbVtNQVhfWS0yXVtNQVhfWC0yXSE9Mil7CQkKCQkJCQltW3ldW3hdPTA7CgkJCQkJc3RlcC0tOwoJCQkJCXJldHVybiAxOwoJCQl9CgkJCWVsc2UKCQkJCXJldHVybiBtW3ldW3hdOwkJCQoJCX0KCX0KfQp2b2lkIHByaW50KGludCBtW01BWF9ZXVtNQVhfWF0pewoJZm9yKGludCBpPTA7aTxNQVhfWTtpKyspewoJCWZvcihpbnQgaj0wO2o8TUFYX1g7aisrKXsKCQkJaWYoaiE9MCkKCQkJCXByaW50ZigiLCIpOwoJCQlwcmludGYoIiVkIixtW2ldW2pdKTsKCQl9CgkJcHJpbnRmKCJcbiIpOwoJfQp9