2013-08-27 222 views
1

通过右手原则解决迷宫

你好
我正在解决课本练习来解决右手原则迷宫

我使用开关的情况下处理它

switch (face) 
{ 
    case face_EAST: 
    { 
     if(map[x][y + 1] == '.' && map[x + 1][y] == '#') 
     { 
      y = y + 1; 
      gotoxy(x, y); 
      face = face_EAST; 
     } 
     else if (map[x - 1][y] == '.' && map[x][y + 1] == '#') 
     { 
      x = x - 1; 
      gotoxy(x, y); 
      face = face_NORTH; 
     } 
     else if (map[x + 1][y] == '.' && map[x + 1][y - 1] == '#') 
     { 
      x = x + 1; 
      gotoxy(x, y); 
      face = face_SOUTH; 
     } 
     else 
      face = face_SOUTH; 

     break; 
    } 
    case face_SOUTH : 
    { 
     if(map[x + 1][y] == '.' && map[x][y - 1] == '#') 
     { 
      x = x + 1; 
      gotoxy(x, y); 
      face = face_SOUTH; 
     } 
     else if(map[x][y - 1] == '.' && map[x - 1][y - 1] == '#') 
     { 
      y = y - 1; 
      gotoxy(x, y); 
      face = face_WEST; 
     } 
     else if(map[x][y + 1] == '.' && map[x + 1][y] == '#') 
     { 
      y = y + 1; 
      gotoxy(x, y); 
      face = face_EAST; 
     } 
     else 
      face = face_WEST; 
     break; 
    } 
    case face_WEST: 
    { 
     if(map[x][y - 1] == '.' && map[x - 1][y] == '#') 
     { 
      y = y - 1; 
      gotoxy(x, y); 
      face = face_WEST; 
     } 
     else if(map[x - 1][y] == '.' && map[x - 1][y + 1] == '#') 
     { 
      x = x - 1; 
      gotoxy(x, y); 
      face = face_NORTH; 
     } 
     else if(map[x + 1][y] == '.' && map[x][y - 1] == '#') 
     { 
      x = x + 1; 
      gotoxy(x, y); 
      face = face_SOUTH; 
     } 
     else if(map[x][y + 1] == '.' && map[x + 1][y] == '#') 
     { 
      y = y + 1; 
      gotoxy(x, y); 
      face = face_EAST; 
     } 
     else if(map[x - 1][y] == '.' && map[x - 1][y + 1] == '#') 
     { 
      x = x - 1; 
      gotoxy(x, y); 
      face = face_NORTH; 
     } 
     else 
      face = face_NORTH; 

     break; 
    } 
    case face_NORTH: 
    { 
     if(map[x - 1][y] == '.' && map[x][y + 1] == '#') 
     { 
      x = x - 1; 
      gotoxy(x, y); 
      face = face_NORTH; 
     } 
     else if(map[x][y - 1] == '.' && map[x - 1][y] == '#') 
     { 
      y = y - 1; 
      gotoxy(x, y); 
      face = face_WEST; 
     } 
     else if(map[x][y + 1] == '.' && map[x + 1][y + 1] == '#') 
     { 
      y = y + 1; 
      gotoxy(x, y); 
      face = face_EAST; 
     } 
     else 
      face = face_EAST; 

     break; 
    } 
} 

我想知道是否有任何更容易的方法来使右手打印ciple工作?
我虽然要改变坐标系,但不能实现它

+3

当左手也以同样的方式工作时,称之为右手原则是否正确? – Potatoswatter

+0

我认为你可以使用表格而不是代码 – perreal

+0

@perreal我该如何使用表格来做到这一点?我不知道 – good5dog5

回答

1

至于“更简单的方法”,这个问题是递归的主要候选人。起初,人们经常发现递归有点难以掌握,但最终会比你拥有的容易。在这个问题的“相关”部分有很多链接,这可能会有所帮助,前一段我写了a program to do it,底部的look()函数是解决问题的函数。