00001 #include <stdio.h>
00002 #include <stdlib.h>
00003 #include <math.h>
00004 #include <time.h>
00005
00006 #define MAX 5
00007
00008 int map2[MAX][MAX]= {
00009 { 1,1,1,1,1},
00010 { 2,0,0,0,1},
00011 { 1,0,1,0,1},
00012 { 1,0,1,0,3},
00013 { 1,1,1,1,1} };
00014
00015 int map[MAX][MAX]={
00016 {1,2,1,1,1},
00017 {1,0,0,0,3},
00018 {1,0,1,1,1},
00019 {1,0,0,0,1},
00020 {1,1,1,1,1}
00021 };
00022
00023 int now_x=0,now_y=0;
00024 char dir='R';
00025
00026
00027 int getWall(){
00028
00029 switch (dir){
00030 case'R':if(now_y-1<0 ||map[now_x][now_y-1]!=1)return 0;break;
00031 case'U':if( (now_x-1<0) || map[now_x-1][now_y]!=1)return 0;break;
00032 case'L':if ( map[now_x][now_y+1]!=1)return 0;break;
00033 case'D':if(map[now_x+1][now_y]!=1)return 0;break;
00034 }
00035 return 1;
00036 }
00037
00038 void turnLeft(){
00039
00040 switch (dir){
00041 case'R':dir = 'U';now_y--;break;
00042 case'U':dir = 'L';now_x--;break;
00043 case'L':dir = 'D';now_y++;break;
00044 case'D':dir = 'R';now_x++;break;
00045 default:
00046 ;
00047 }
00048
00049 }
00050
00051 void turnRight(){
00052
00053 switch (dir){
00054 case'R':dir = 'D';break;
00055 case'U':dir = 'R';break;
00056 case'L':dir = 'U';break;
00057 case'D':dir = 'L';break;
00058 default:
00059 return ;
00060 }
00061 }
00062
00063 int main(){
00064 int i,j;
00065
00066 for(i=0;i<MAX;i++){
00067 for(j=0;j<MAX;j++){
00068 if(map[i][j]==2){
00069 now_x=i;now_y=j;
00070 }
00071
00072 }
00073 }
00074
00075 printf("start!!\n");
00076
00077 while(!(map[now_x][now_y]==3)){
00078 printf("dir=%c now_x = %d,now_y = %d \n",dir ,now_x,now_y);
00079 if(getWall()){
00080 turnRight();
00081 }else{turnLeft();}
00082
00083
00084 }
00085 printf("clear!!\n");
00086 }
00087