#include<stdio.h>
#include<stack>
#include<queue>

using namespace std;

int main()
{
    int sx,sy,ex,ey;
    short map[9][9][3];// 0:x, 1:y, 2:num,
    queue<int> x,y;

    int i,j;

    for(i=0;i<9;i++)
        for(j=0;j<9;j++)
        {
            map[i][j][0]=255;
            map[i][j][1]=255;
            map[i][j][2]=255; //최소이동거리를 무한대로 초기화
        }


    printf("출발 위치 입력 : ");
    scanf("%d %d",&sx,&sy);//출발지 입력
    printf("도착 위치 입력 : ");
    scanf("%d %d",&ex,&ey);//도착지 입력


    map[sx][sy][0]=sx;
    map[sx][sy][1]=sy;
    map[sx][sy][2]=0; // 출발지 값 초기화


    x.push(sx);
    y.push(sy); //우선너비탐색을 위해 큐에 넣음 (스택에 넣을시 우선깊이탐색이 된다.)

    while(1) //탐색 루프
    {
        i=x.front();
        x.pop();
        j=y.front();
        y.pop();

        if( i==ex && j==ey ) //목표지점 도착시 종료
            break;

        if(i+2<9)
        {
            if(j+1<9)
                if(map[i][j][2]+1<map[i+2][j+1][2])
                {
                    map[i+2][j+1][0]=i;
                    map[i+2][j+1][1]=j;
                    map[i+2][j+1][2]=map[i][j][2]+1;
                    x.push(i+2);
                    y.push(j+1);
                }
            if(j-1>-1)
                if(map[i][j][2]+1<map[i+2][j-1][2])
                {
                    map[i+2][j-1][0]=i;
                    map[i+2][j-1][1]=j;
                    map[i+2][j-1][2]=map[i][j][2]+1;
                    x.push(i+2);
                    y.push(j-1);
                }
        }

        if(i-2>-1)
        {
            if(j+1<9)
                if(map[i][j][2]+1<map[i-2][j+1][2])
                {
                    map[i-2][j+1][0]=i;
                    map[i-2][j+1][1]=j;
                    map[i-2][j+1][2]=map[i][j][2]+1;
                    x.push(i-2);
                    y.push(j+1);
                }
            if(j-1>-1)
                if(map[i][j][2]+1<map[i-2][j-1][2])
                {
                    map[i-2][j-1][0]=i;
                    map[i-2][j-1][1]=j;
                    map[i-2][j-1][2]=map[i][j][2]+1;
                    x.push(i-2);
                    y.push(j-1);
                }
        }
        if(i+1<9)
        {
            if(j+2<9)
                if(map[i][j][2]+1<map[i+1][j+2][2])
                {
                    map[i+1][j+2][0]=i;
                    map[i+1][j+2][1]=j;
                    map[i+1][j+2][2]=map[i][j][2]+1;
                    x.push(i+1);
                    y.push(j+2);
                }
            if(j-2>-1)
                if(map[i][j][2]+1<map[i+1][j-2][2])
                {
                    map[i+1][j-2][0]=i;
                    map[i+1][j-2][1]=j;
                    map[i+1][j-2][2]=map[i][j][2]+1;
                    x.push(i+1);
                    y.push(j-2);
                }
        }

        if(i-1>-1)
        {
            if(j+2<9)
                if(map[i][j][2]+1<map[i-1][j+2][2])
                {
                    map[i-1][j+2][0]=i;
                    map[i-1][j+2][1]=j;
                    map[i-1][j+2][2]=map[i][j][2]+1;
                    x.push(i-1);
                    y.push(j+2);
                }
            if(j-2>-1)
                if(map[i][j][2]+1<map[i-1][j-2][2])
                {
                    map[i-1][j-2][0]=i;
                    map[i-1][j-2][1]=j;
                    map[i-1][j-2][2]=map[i][j][2]+1;
                    x.push(i-1);
                    y.push(j-2);
                }
        }
    }

    printf("(%d %d)에서 (%d %d)까지 %d번 이동n",sx,sy,i,j,map[i][j][2]);


    i=ex,j=ey;
    while(1) //루트 찾기
    {
        printf("(%d %d)",i,j);
        if(sx==i && sy==j)
            break;
        printf("←");
        ex=i;
        i=map[i][j][0];
        j=map[ex][j][1]; //기록된 값을 토대로 루트 추적
    }

    return 0;
}

들여쓰기 뭐같네
들여쓰기하다가 시간 다감 =ㅅ=