路径规划(京东2016实习生真题)

题目链接:http://exercise.acmcoder.com/online/online_judge_ques?ques_id=3813&konwledgeId=41

解题思路:不在同意条直线上的起点与终点,就让起点按着对角道先到达与终点同直线的过度点,再转玩(水平或垂直)走到终点

代码如下:

#include
int chan(char c){
	switch (c) {
	case 'a':return 1;
	case 'b':return 2;
	case 'c': return 3;
	case 'd': return 4;
	case 'e':return 5;
	case 'f':return 6;
	case 'g':return 7;
	case 'h':return 8;
	}
}
int abs(int x){
	return x>=0?x:-x;
}
void  f(int x,int y){
	int i;
	  if(x==0&&y==0){
	    return ;
	    }else if(x==0){
	    	//printf("%d\n",y);
	    	if(y>0){
              for(i=1;i<=y;i++){	
              	printf("D\n");
              }
			}else{//y<0
		     	y=abs(y);
			   	for(i=1;i<=y;i++){	
              	printf("U\n");
                }
			}
	    }else if(y==0){
	    	if(x>0){
              for(i=1;i<=x;i++){	
              	printf("L\n");
              }
			}else{//x<0
			x=abs(x);
			   	for(i=1;i<=x;i++){	
              	printf("R\n");
                }
			}
	    	
	    }else if(x>0&&y>0){
	    		for(i=1;i<=x;i++){	
              	printf("LD\n");
                }
	    	
	    }else if(x<0&&y<0){
	    	x=abs(x);
	    	 for(i=1;i<=x;i++){	
              	printf("RU\n");
                }
	    	
	    }else if(x>0&&y<0){
	    	for(i=1;i<=x;i++){	
              	printf("LU\n");
                }
	    }else {
		    for(i=1;i<=y;i++){	
              	printf("RD\n");
                }
		}
}
int main(){
	char a1,a2;
	int d,dx,dy,x1,y1,x2,y2,x,y,i;
	while(scanf("%c%d",&a1,&y1)!=EOF){
		getchar();
	    scanf("%c%d",&a2,&y2);
	    getchar();
	    x1=chan(a1);
	    x2=chan(a2);
	    x=x1-x2;
	    y=y1-y2;
	    dx=abs(x);
	    dy=abs(y);
	    d=abs(dx-dy);
	    if(dx==dy){
	    	printf("%d\n",dx);
	    	f(x,y);
	    }else if(dx>dy){
	    	printf("%d\n",dx);
             if(x>0){
             	f(dy,y);
             	f(d,0);
             }else{
             	f(-dy,y);
             	f(-d,0);
             } 	   	
	    }else{
	    	printf("%d\n",dy);
	    	if(y>0){
            f(x,dx);
            f(0,d);
	    	}else{
	    		f(x,-dx);
	    		f(0,-d);
	    	}
	    }
	  
	}
	return 0;
} 



你可能感兴趣的:(路径规划(京东2016实习生真题))