다름이 아니라 최근 게임을 하다가 잘 안풀리길래 프로그램으로 만들어보면 어떨까 생각해봤습니다. 문제는 아래와 같습니다.
레ㅇ튼교수 시리즈인데요, 나이트를 움직여(장기의 마 랑 같아요)판 전체를 한번씩만 도는거 입니다.
시작은 0,0 지점(왼쪽 위)에서 시작합니다.
만들어봤는데 결과는 성공한것 처럼(?) 보이지만 그 경로를 찍는 문자열을 잘 모르겠습니다.
질문 1. 풀이가 맞을까요?
질문 2. 문자열에 변수를 넣는방법이 궁금합니다.( 예를들어 str= "%d 지점으로 이동했습니다." 처럼요 <- 이문장은 틀렸겠죠?^^;;)
아래는 제가 작성한 코드입니다. 120만번 호출끝에 완성하네요..
C언어 공부한지 13년전이고 프로그래밍을 할일이 없어서 코드가 좀 안이쁩니다.
#include
#include
int a[6][6] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
char msg[];
char *temp;
long int count =0;
int is_end(void)
{
int i,j;
for(i=0;i<6;i++){
for(j=0;j<6;j++)
{
if(a[i][j] == 0) return 0;
}
}
return 1;
}
int go(int i,int j)
{
a[i][j] = 1;
count++;
printf("%ld %d,%d\n",count,i,j);
if(i-1 >=0 && j-2 >=0 && !a[i-1][j-2]) go(i-1,j-2);
if(i-2 >=0 && j-1 >=0 && !a[i-2][j-1]) go(i-2,j-1);
if(i-2 >=0 && j+1 <=5 && !a[i-2][j+1]) go(i-2,j+1);
if(i-1 >=0 && j+2 <=5 && !a[i-1][j+2]) go(i-1,j+2);
if(i+1 <=5 && j-2 >=0 && !a[i+1][j-2]) go(i+1,j-2);
if(i+2 <=5 && j-1 >=0 && !a[i+2][j-1]) go(i+2,j-1);
if(i+2 <=5 && j+1 <=5 && !a[i+2][j+1]) go(i+2,j+1);
if(i+1 <=5 && j+2 <=5 && !a[i+1][j+2]) go(i+1,j+2);
if(is_end())
{
printf("Success");
system("pause");
return 0;
}
else
{
a[i][j] = 0;
return 0;
}
}
int main(void)
{
int i,j;
go(0,0);
for(i=0;i<6;i++){
for(j=0;j<6;j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
system("pause");
scanf("%d",&i);
return 0;
}
--------------------------------------------라고 글을 올렸는데 다른방법으로 해결하였습니다.^^; 감사합니다.(수정) ------------------------