2017-01-16 4 views
0

지금 당장 나이트가 더 이상 움직일 수 없을 때까지 움직일 수있게되기를 원한다. 코드는 대부분 제대로 작동하지만 코드가 한 번에 두 개를 인쇄합니다. 내 이동 기능에서재귀를 사용한 나이트 투어

코드 :

board[0][0] = 1; 

    if (row + 1 > -1 && row + 1 < 5 && col + 2 > -1 && col + 2 < 5 && board[row + 1][col + 2] == 0) { 
     move++; 
     row += 1; 
     col += 2; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row + 1 > -1 && row + 1 < 5 && col - 2 > -1 && col - 2 < 5 && board[row + 1][col - 2] == 0) { 
     move++; 
     row += 1; 
     col -= 2; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row - 1 > -1 && row - 1 < 5 && col + 2 > -1 && col + 2 < 5 && board[row - 1][col + 2] == 0) { 
     move++; 
     row -= 1; 
     col += 2; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row - 1 > -1 && row - 1 < 5 && col - 2 > -1 && col - 2 < 5 && board[row - 1][col - 2] == 0) { 
     move++; 
     row -= 1; 
     col -= 2; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row - 2 > -1 && row - 2 < 5 && col + 1 > -1 && col + 1 < 5 && board[row - 2][col + 1] == 0) { 
     move++; 
     row -= 2; 
     col += 1; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row - 2 > -1 && row - 2 < 5 && col - 1 > -1 && col - 1 < 5 && board[row - 2][col - 1] == 0) { 
     move++; 
     row -= 2; 
     col -= 1; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row + 2 > -1 && row + 2 < 5 && col + 1 > -1 && col + 1 < 5 && board[row + 2][col + 1] == 0) { 
     move++; 
     row += 2; 
     col += 1; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row + 2 > -1 && row + 2 < 5 && col - 1 > -1 && col - 1 < 5 && board[row + 2][col - 1] == 0) { 
     move++; 
     row += 2; 
     col -= 1; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 
} 

아웃풋 :

1 0 0 0 0 
    0 0 2 0 0 
    0 0 0 0 0 
    0 0 0 0 0 
    0 0 0 0 0 
Press any key to continue . . . 

    1 0 0 0 0 
    0 0 2 0 0 
    0 0 0 0 3 
    3 0 0 0 0 
    0 0 0 0 0 
Press any key to continue . . . 

    1 0 0 0 0 
    0 0 2 0 0 
    0 0 0 0 3 
    3 0 4 0 0 
    0 0 0 0 0 
Press any key to continue . . . 

    1 0 0 0 0 
    0 0 2 0 0 
    0 0 0 0 3 
    3 0 4 0 0 
    0 0 0 0 5 
Press any key to continue . . . 

    1 0 0 0 0 
    0 0 2 0 0 
    0 0 0 6 3 
    3 0 4 0 0 
    0 0 0 0 5 
Press any key to continue . . . 

    1 0 0 0 0 
    0 0 2 0 0 
    0 0 0 6 3 
    3 7 4 0 0 
    0 0 0 0 5 
Press any key to continue . . . 

    1 0 0 0 0 
    0 0 2 0 0 
    0 0 0 6 3 
    3 7 4 0 0 
    0 0 0 8 5 
Press any key to continue . . . 

    1 0 0 0 0 
    0 0 2 0 0 
    0 0 9 6 3 
    3 7 4 0 0 
    0 0 0 8 5 
Press any key to continue . . . 

    1 0 0 0 0 
    0 0 2 0 0 
    0 0 9 6 3 
    3 7 4 0 10 
10 0 0 8 5 
Press any key to continue . . . 

    1 0 0 0 0 
    0 0 2 0 0 
    0 0 9 6 3 
    3 7 4 0 10 
10 0 11 8 5 
Press any key to continue . . . 

    1 0 0 0 0 
    0 0 2 0 0 
    0 12 9 6 3 
    3 7 4 0 10 
10 0 11 8 5 
Press any key to continue . . . 

    1 0 0 0 0 
    0 0 2 0 0 
    0 12 9 6 3 
    3 7 4 13 10 
10 0 11 8 5 
Press any key to continue . . . 

    1 0 0 0 0 
    0 0 2 0 0 
    0 12 9 6 3 
    3 7 4 13 10 
10 14 11 8 5 
Press any key to continue . . . 

    1 0 0 0 0 
    0 0 2 0 15 
15 12 9 6 3 
    3 7 4 13 10 
10 14 11 8 5 
Press any key to continue . . . 

    1 16 0 0 0 
    0 0 2 0 15 
15 12 9 6 3 
    3 7 4 13 10 
10 14 11 8 5 
Press any key to continue . . . 

    1 16 0 0 0 
    0 0 2 17 15 
15 12 9 6 3 
    3 7 4 13 10 
10 14 11 8 5 
Press any key to continue . . . 

printBoard 기능 :

void printBoard() { 
    cout << endl; 
    for (int i = 0; i < 5; i++) { 
     for (int j = 0; j < 5; j++) { 
      cout << setw(3) << board[i][j]; 
     } 
      cout << endl; 
    } 

} 

전체 프로그램 :

// ConsoleApplication15.cpp : Defines the entry point for the console application. 


#include "stdafx.h" 
#include <iostream> 
#include <iomanip> 

using namespace std; 

void makeBoard(); 
void moveKnight(int row, int col, int move); 
void printBoard(); 

int board[4][4]; 

int main() 
{ 
    int row = 0; 
int col = 0; 
int move = 1; 

makeBoard(); 
moveKnight(0, 0, 1); 
printBoard(); 



system("pause"); 
return 0; 
} 

void makeBoard() { 
for (int i = 0; i < 5; i++) { 
    for (int j = 0; j < 5; j++) { 
     board[i][j] = 0; 

    } 
} 

} 

void printBoard() { 
cout << endl; 
for (int i = 0; i < 5; i++) { 
    for (int j = 0; j < 5; j++) { 
     cout << setw(3) << board[i][j]; 
    } 
    cout << endl; 
} 

} 

void moveKnight(int row, int col, int move) { 

board[0][0] = 1; 

    if (row + 1 > -1 && row + 1 < 5 && col + 2 > -1 && col + 2 < 5 && board[row + 1][col + 2] == 0) { 
     move++; 
     row += 1; 
     col += 2; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row + 1 > -1 && row + 1 < 5 && col - 2 > -1 && col - 2 < 5 && board[row + 1][col - 2] == 0) { 
     move++; 
     row += 1; 
     col -= 2; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row - 1 > -1 && row - 1 < 5 && col + 2 > -1 && col + 2 < 5 && board[row - 1][col + 2] == 0) { 
     move++; 
     row -= 1; 
     col += 2; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row - 1 > -1 && row - 1 < 5 && col - 2 > -1 && col - 2 < 5 && board[row - 1][col - 2] == 0) { 
     move++; 
     row -= 1; 
     col -= 2; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row - 2 > -1 && row - 2 < 5 && col + 1 > -1 && col + 1 < 5 && board[row - 2][col + 1] == 0) { 
     move++; 
     row -= 2; 
     col += 1; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row - 2 > -1 && row - 2 < 5 && col - 1 > -1 && col - 1 < 5 && board[row - 2][col - 1] == 0) { 
     move++; 
     row -= 2; 
     col -= 1; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row + 2 > -1 && row + 2 < 5 && col + 1 > -1 && col + 1 < 5 && board[row + 2][col + 1] == 0) { 
     move++; 
     row += 2; 
     col += 1; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 

    else if (row + 2 > -1 && row + 2 < 5 && col - 1 > -1 && col - 1 < 5 && board[row + 2][col - 1] == 0) { 
     move++; 
     row += 2; 
     col -= 1; 
     board[row][col] = move; 
     printBoard(); 
     system("pause"); 
     moveKnight(row, col, move); 
    } 
} 
,
+0

어딘가에 'ifs'가 있어야합니다. 두 번째 이동이 항상 유효하지는 않습니다 (3s 및 10s에서 보임). 나는 당신의 코드를 리펙토링하여 그 일을 쉽게 따라 할 것을 제안 할 것이다. – code11

+0

@ code11 쉽게 따라 할 수 있습니까? 네, 그것은 문제인 제 3 움직임과 제 10 움직임입니다. 왜 두 번 인쇄하는지 모르겠다. – Nick

+2

Welcome to Stack Overflow! 디버거를 사용하여 코드를 단계별로 실행하는 방법을 배워야 할 필요가있는 것 같습니다. 좋은 디버거를 사용하면 한 줄씩 프로그램을 실행하고 예상 한 곳에서 벗어난 곳을 볼 수 있습니다. 프로그래밍을 할 때 필수적인 도구입니다. 추가 읽기 : ** [작은 프로그램을 디버깅하는 방법] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver

답변

2

int board[4][4];int board[5][5]; :-)로 바꿔보십시오.

+0

도움을 주셔서 감사합니다. 나는 그게 전부 간단하다는 걸 믿을 수 없어 :) – Nick

+0

당신은 오신 것을 환영합니다! –