void WayCopy(int (*x)[N],int (*y)[N]); int FindWay(int (*x)[N],int i,int j); void MapRand(int (*x)[N]); void PrMap(int (*x)[N]); void Result(void); void Find(void); void NotFind(void); void main(void) { int map[N][N]; char ch; clrscr();
printf(\ scanf(\ Init(); MapRand(map); PrMap(map); if(ch=='1') PeopleFind(map); else
FindWay(map,1,1); Result(); Close(); }
void Init(void)
{ int gd=DETECT,gm;
initgraph(&gd,&gm,\
}
void DrawPeople(int *x,int *y,int n)
{ setfillstyle(SOLID_FILL,WHITE);
bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6); switch(n) {
case 1: (*x)--;break; case 2: (*x)--;(*y)++;break ; case 3: (*y)++;break; case 4: (*x)++;(*y)++;break; case 5: (*x)++;break; case 6: (*x)++;(*y)--;break; case 7: (*y)--;break; case 8: (*x)--;(*y)--;break; }
setfillstyle(SOLID_FILL,YELLOW);
bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6); }
void PeopleFind(int (*map)[N]) { int x,y; char c=0; x=y=1;
setcolor(BLACK); line(500,200,550,200); outtextxy(570,197,\ line(500,200,450,200); outtextxy(430,197,\ line(500,200,500,150); outtextxy(497,130,\ line(500,200,500,250); outtextxy(497,270,\ line(500,200,450,150);
outtextxy(445,130,\ line(500,200,550,150); outtextxy(550,130,\ line(500,200,450,250); outtextxy(445,270,\ line(500,200,550,250); outtextxy(550,270,\ setcolor(YELLOW);
outtextxy(420,290,\ setfillstyle(SOLID_FILL,YELLOW);
bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6); while(c!=13) { c=getch();
if(c=='w'&&map[x-1][y]!=1) DrawPeople(&x,&y,1); else
if(c=='e'&&map[x-1][y+1]!=1) DrawPeople(&x,&y,2); else
if(c=='d'&&map[x][y+1]!=1) DrawPeople(&x,&y,3); else
if(c=='c'&&map[x+1][y+1]!=1) DrawPeople(&x,&y,4); else
if(c=='x'&&map[x+1][y]!=1) DrawPeople(&x,&y,5); else
if(c=='z'&&map[x+1][y-1]!=1)
DrawPeople(&x,&y,6); else
if(c=='a'&&map[x][y-1]!=1) DrawPeople(&x,&y,7);
else if(c=='q'&&map[x-1][y-1]!=1) DrawPeople(&x,&y,8); }
setfillstyle(SOLID_FILL,WHITE);
bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6); if(x==N-2&&y==N-2) yes=1; }
void WayCopy(int (*oldmap)[N],int (*map)[N]) { int i,j; for(i=0;i oldmap[i][j]=map[i][j]; } int FindWay(int (*map)[N],int i,int j) { if(i==N-2&&j==N-2) { yes=1; return; } map[i][j]=1; WayCopy(oldmap,map); if(oldmap[i+1][j+1]==0&&!yes) { FindWay(oldmap,i+1,j+1); if(yes) { way[wayn][0]=i; way[wayn++][1]=j; return; } } WayCopy(oldmap,map); if(oldmap[i+1][j]==0&&!yes) { FindWay(oldmap,i+1,j); if(yes) { way[wayn][0]=i; way[wayn++][1]=j; return; } } WayCopy(oldmap,map); if(oldmap[i][j+1]==0&&!yes) { FindWay(oldmap,i,j+1); if(yes) { way[wayn][0]=i; way[wayn++][1]=j; return; }