>>639
お世辞にもきれいなコードとは言えんが、これでどうだ?

#include <stdio.h>
#define X 11
#define Y 10
typedef enum {DM=99,KB=-1,KI=-2,OR=-3,} Map[Y][X];
Map map = {
{DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,},{DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,},
{DM,DM,DM,DM,DM,KI,DM,DM,DM,DM,DM,},{DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,},
{DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,},{DM,DM,DM,DM,DM,DM,KB,KB,KB,DM,DM,},
{DM,DM,DM,DM,DM,DM,KB,DM,DM,DM,DM,},{DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,},
{DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,},{DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,DM,},};
void PrintMap(Map m){int x, y;for(y=0;y<Y;y++){for(x=0;x<X;x++)
switch(m[y][x]){
case KB: printf("壁"); break; case KI: printf("木"); break;
case OR: printf("俺"); break; case DM: printf("■"); break;
default: printf("□"); break;}printf("\n");}printf("\n");}
void FindRec(Map m,int x,int y,int v,int w){m[y][x]=w;
if(w++<v){
if((0<=x-1)&&(w<m[y][x-1])) FindRec(m,x-1,y,v,w);
if((x+1<X)&&(w<m[y][x+1])) FindRec(m,x+1,y,v,w);
if((0<=y-1)&&(w<m[y-1][x])) FindRec(m,x,y-1,v,w);
if((y+1<Y)&&(w<m[y+1][x])) FindRec(m,x,y+1,v,w);}}
void Find(Map m,int x,int y,int v){FindRec(m,x,y,v,0);m[y][x]=OR;}
int main(void){Find(map,5,4,4);PrintMap(map);return 0;}