
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55


본문내용
(Cur_X + ktmove1[6] >= 0) && (Cur_Y + ktmove2[6] < board_size_col) )
{
if( !board[Cur_X + ktmove1[6] ][Cur_Y + ktmove2[6] ] )
{
exits[6] = cmpBoard(board,board_size_row,board_size_col,Cur_X
+ktmove1[6],Cur_Y+ktmove2[6])+1;
}
}
if( (Cur_X + ktmove1[7] >= 0) && (Cur_Y + ktmove2[7] < board_size_col) )
{
if( !board[Cur_X + ktmove1[7]][Cur_Y + ktmove2[7] ] )
{
exits[7] = cmpBoard(board,board_size_row,board_size_col,Cur_X
+ktmove1[7],Cur_Y+ktmove2[7])+1;
}
}
for(row=0; row<8; row++)//최소의 출구를 가지는 다음 위치 선정
{
if( (min > exits[row]) && (exits[row] != 0) )
{
min = exits[row];
next = row;//next는 이동할 위치
}
}
if(min == 8)//min 8일경우는 이동가능한 곳이 없을 경우
{
printf("출구를 찾을 수 없습니다.\n");
return 0;
}
Cur_X += ktmove1[next];//현재위치를 최소의 출구를 가지는 위치로 이동
Cur_Y += ktmove2[next];
board[Cur_X][Cur_Y] = 1;//이동한다음에 board배열에 흔적을 남긴다.
system("CLS");//화면을 지운다.
PrintBoard(board,board_size_row,board_size_col);//board배열을 출력해준다.
Sleep(50);//50ms동안 정지시킨다.
printf("x=%d y=%d\n",Cur_X,Cur_Y);//현재 이동한 위치 출력
min = 8;//변수들을 초기화한다.
next = 0;
for(row=0; row<8; row++)
exits[row]=0;
//checkBoard함수를 통해 모든 체스판을 경유했을 경우 프로그램을 끝낸다.
} while(!CheckBoard(board,board_size_row,board_size_col));
for( row=0; row
{
free(board[row]);
}
}
int CheckBoard(char **board, int board_size_row, int board_size_col)
{
int OK=0;
int row,col;
for(row=0; row
{
for(col=0; col
{
if(board[row][col])//모든 경로를 경유했을 때만 OK변수가 1이됨
OK = 1;
else
return 0;
}
}
return OK;
}
void PrintBoard(char **board, int board_size_row, int board_size_col)
{
int row,col;
for(row=0; row
{
for(col=0; col
{
printf("%3d",board[row][col]);
}
printf("\n");
}
printf("\n");
}
int cmpBoard(char **board, int board_size_row, int board_size_col, int Cur_X, int Cur_Y)
{
int npos=0;
if( (Cur_X + ktmove1[0] >= 0) && (Cur_Y + ktmove2[0] >= 0) )
{
if( !board[Cur_X + ktmove1[0]][Cur_Y + ktmove2[0]] )
{
npos++;
}
}
if( (Cur_X + ktmove1[1] >= 0) && (Cur_Y + ktmove2[1] >= 0) )
{
if( !board[Cur_X + ktmove1[1] ][Cur_Y + ktmove2[1] ] )
{
npos++;
}
}
if( (Cur_X + ktmove1[2] < board_size_row) && (Cur_Y + ktmove2[2] >= 0) )
{
if( !board[Cur_X + ktmove1[2] ][Cur_Y + ktmove2[2] ] )
{
npos++;
}
}
if( (Cur_X + ktmove1[3] < board_size_row) && (Cur_Y + ktmove2[3] >= 0) )
{
if( !board[Cur_X + ktmove1[3] ][Cur_Y + ktmove2[3] ] )
{
npos++;
}
}
if( (Cur_X + ktmove1[4] < board_size_row) &&
(Cur_Y + ktmove2[4] < board_size_col) )
{
if( !board[Cur_X + ktmove1[4] ][Cur_Y + ktmove2[4] ] )
{
npos++;
}
}
if( (Cur_X + ktmove1[5] < board_size_row) &&
(Cur_Y + ktmove2[5] < board_size_col) )
{
if( !board[Cur_X + ktmove1[5] ][Cur_Y + ktmove2[5] ] )
{
npos++;
}
}
if( (Cur_X + ktmove1[6] >= 0) && (Cur_Y + ktmove2[6] < board_size_col) )
{
if( !board[Cur_X + ktmove1[6] ][Cur_Y + ktmove2[6] ] )
{
npos++;
}
}
if( (Cur_X + ktmove1[7] >= 0) && (Cur_Y + ktmove2[7] < board_size_col) )
{
if( !board[Cur_X + ktmove1[7]][Cur_Y + ktmove2[7] ] )
{
npos++;
}
}
return npos;
}
{
if( !board[Cur_X + ktmove1[6] ][Cur_Y + ktmove2[6] ] )
{
exits[6] = cmpBoard(board,board_size_row,board_size_col,Cur_X
+ktmove1[6],Cur_Y+ktmove2[6])+1;
}
}
if( (Cur_X + ktmove1[7] >= 0) && (Cur_Y + ktmove2[7] < board_size_col) )
{
if( !board[Cur_X + ktmove1[7]][Cur_Y + ktmove2[7] ] )
{
exits[7] = cmpBoard(board,board_size_row,board_size_col,Cur_X
+ktmove1[7],Cur_Y+ktmove2[7])+1;
}
}
for(row=0; row<8; row++)//최소의 출구를 가지는 다음 위치 선정
{
if( (min > exits[row]) && (exits[row] != 0) )
{
min = exits[row];
next = row;//next는 이동할 위치
}
}
if(min == 8)//min 8일경우는 이동가능한 곳이 없을 경우
{
printf("출구를 찾을 수 없습니다.\n");
return 0;
}
Cur_X += ktmove1[next];//현재위치를 최소의 출구를 가지는 위치로 이동
Cur_Y += ktmove2[next];
board[Cur_X][Cur_Y] = 1;//이동한다음에 board배열에 흔적을 남긴다.
system("CLS");//화면을 지운다.
PrintBoard(board,board_size_row,board_size_col);//board배열을 출력해준다.
Sleep(50);//50ms동안 정지시킨다.
printf("x=%d y=%d\n",Cur_X,Cur_Y);//현재 이동한 위치 출력
min = 8;//변수들을 초기화한다.
next = 0;
for(row=0; row<8; row++)
exits[row]=0;
//checkBoard함수를 통해 모든 체스판을 경유했을 경우 프로그램을 끝낸다.
} while(!CheckBoard(board,board_size_row,board_size_col));
for( row=0; row
free(board[row]);
}
}
int CheckBoard(char **board, int board_size_row, int board_size_col)
{
int OK=0;
int row,col;
for(row=0; row
for(col=0; col
if(board[row][col])//모든 경로를 경유했을 때만 OK변수가 1이됨
OK = 1;
else
return 0;
}
}
return OK;
}
void PrintBoard(char **board, int board_size_row, int board_size_col)
{
int row,col;
for(row=0; row
for(col=0; col
printf("%3d",board[row][col]);
}
printf("\n");
}
printf("\n");
}
int cmpBoard(char **board, int board_size_row, int board_size_col, int Cur_X, int Cur_Y)
{
int npos=0;
if( (Cur_X + ktmove1[0] >= 0) && (Cur_Y + ktmove2[0] >= 0) )
{
if( !board[Cur_X + ktmove1[0]][Cur_Y + ktmove2[0]] )
{
npos++;
}
}
if( (Cur_X + ktmove1[1] >= 0) && (Cur_Y + ktmove2[1] >= 0) )
{
if( !board[Cur_X + ktmove1[1] ][Cur_Y + ktmove2[1] ] )
{
npos++;
}
}
if( (Cur_X + ktmove1[2] < board_size_row) && (Cur_Y + ktmove2[2] >= 0) )
{
if( !board[Cur_X + ktmove1[2] ][Cur_Y + ktmove2[2] ] )
{
npos++;
}
}
if( (Cur_X + ktmove1[3] < board_size_row) && (Cur_Y + ktmove2[3] >= 0) )
{
if( !board[Cur_X + ktmove1[3] ][Cur_Y + ktmove2[3] ] )
{
npos++;
}
}
if( (Cur_X + ktmove1[4] < board_size_row) &&
(Cur_Y + ktmove2[4] < board_size_col) )
{
if( !board[Cur_X + ktmove1[4] ][Cur_Y + ktmove2[4] ] )
{
npos++;
}
}
if( (Cur_X + ktmove1[5] < board_size_row) &&
(Cur_Y + ktmove2[5] < board_size_col) )
{
if( !board[Cur_X + ktmove1[5] ][Cur_Y + ktmove2[5] ] )
{
npos++;
}
}
if( (Cur_X + ktmove1[6] >= 0) && (Cur_Y + ktmove2[6] < board_size_col) )
{
if( !board[Cur_X + ktmove1[6] ][Cur_Y + ktmove2[6] ] )
{
npos++;
}
}
if( (Cur_X + ktmove1[7] >= 0) && (Cur_Y + ktmove2[7] < board_size_col) )
{
if( !board[Cur_X + ktmove1[7]][Cur_Y + ktmove2[7] ] )
{
npos++;
}
}
return npos;
}
소개글