一天,丁俊晖编一整天的程序,突然觉得累了,于是便决定在房间内四处走走。他的房间是矩形的,他从电脑开始随便选了一个角度开始行走。由于职业习 惯,丁俊晖走路始终是直线,而且碰到墙以后会反弹,入射角度与出射角度完全相同。丁俊晖会一直行走,直到灵感再次迸发。假设他的行走速度是匀速的,现在, 丁俊晖的母亲想知道他一共休息了多长时间以便提醒他继续工作。 

丁俊晖想考考他的母亲,于是他记录了自己碰到墙壁的序列并且告诉了她,你有没有办法能够帮助她计算出小丁所走的路程? 
输入

输入包括多个测试用例,每个测试用例如下: 
第一行包含两个数字 w, l(0<w, l<=1000),分别代表房间的宽度和长度; 
第二行包括两个数字 x0, y0,代表电脑的位置坐标 (x0, y0); 
第三行包含两个数字 x1, y1,代表丁俊晖的位置坐标 (x1, y1); 
最后一行是一个包含'F', 'B', 'L', 'R'四种字符的字符串,分别代表墙在前面、后面、左边或是右边,字符串的长度小于等于 1000; 
我们约定,左上角的坐标为0,0,所有的坐标都是浮点型数字。 


输出

一个浮点型数字,代表总路程,结果精确到小数点后 4 位。
       



我用c写的如下:
 #include<stdio.h>
#include<math.h>
#include<string.h>
void main()
{  int m;
   double w, l, x0, y0, x1, y1, s;
   double reflect(double, double, double, double, double, double, int, char direction[]) ;
   char direction[1000] ;
   
   scanf("%lf %lf\n", &w, &l) ;
   scanf("%lf %lf\n", &x0, &y0) ;
   scanf("%lf %lf\n", &x1, &y1) ;
   gets(direction) ;
   
   m=strlen(direction);
   s=reflect(x0, y0, x1, y1, w, l, m, direction);
   printf("%.4lf\n", s);
  
}

reflect(double X0, double Y0, double X1, double Y1, double wi, double le, int n, char direct[])
{ int i=0;
  double k, p, q;
  
  if(i<n)
  { 
     if(direct[i]=='F') return( reflect(X0, -Y0, X1, Y1, wi, le, n, direct) ) ;  
     if(direct[i]=='L') return( reflect(-X0, Y0, X1, Y1, wi, le, n, direct) ) ;
     if(direct[i]== 'B') return( reflect(X0, 2*le-Y0, X1, Y1, wi, le, n, direct) ) ;
     if(direct[i]=='R') return( reflect(2*wi-X0, Y0, X1, Y1, wi, le, n, direct) ) ; 
     i++;
  }
  else
  { k=(X0-X1)*(X0-X1)-(Y0-Y1)*(Y0-Y1);
    p=fabs(k);
    q=sqrt(p);
    return(q);
  }
}

编译通过了,组建过不了。哪里错了啊,急求高手指点。