#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;
}
들여쓰기 뭐같네
들여쓰기하다가 시간 다감 =ㅅ=
댓글 0