경로 계획 (경 동 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
",y); if(y>0){ for(i=1;i<=y;i++){ printf("D
"); } }else{//y<0 y=abs(y); for(i=1;i<=y;i++){ printf("U
"); } } }else if(y==0){ if(x>0){ for(i=1;i<=x;i++){ printf("L
"); } }else{//x<0 x=abs(x); for(i=1;i<=x;i++){ printf("R
"); } } }else if(x>0&&y>0){ for(i=1;i<=x;i++){ printf("LD
"); } }else if(x<0&&y<0){ x=abs(x); for(i=1;i<=x;i++){ printf("RU
"); } }else if(x>0&&y<0){ for(i=1;i<=x;i++){ printf("LU
"); } }else { for(i=1;i<=y;i++){ printf("RD
"); } } } 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
",dx); f(x,y); }else if(dx>dy){ printf("%d
",dx); if(x>0){ f(dy,y); f(d,0); }else{ f(-dy,y); f(-d,0); } }else{ printf("%d
",dy); if(y>0){ f(x,dx); f(0,d); }else{ f(x,-dx); f(0,-d); } } } return 0; }

좋은 웹페이지 즐겨찾기