#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");
}
}
寫了好久,遞迴好難活用...