2017-01-16 11 views
0

今、私はナイトのツアーのポイントにいます。ここでは、ナイトがもう移動できなくなり、次に停止するまで移動できるようにします。コードはほとんどの場合うまく動作しますが、コードは同じ番号の2つを出力します。私の移動機能からナイトツアー再帰を使用して

コード:

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」のどこかにある必要があります。 2番目の移動は必ずしも有効ではありません(3秒と10秒を見てください)。私はあなたのコードをリファクタリングして、何が起こっているかに従うことをお勧めします。 – code11

+0

@ code11どのように私はそれを簡単にすることができますか?はい、それは問題である第3の動きと第10の動きです。なぜ2回印刷しているのかわからない – Nick

+2

ようこそ!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。詳しい読書:** [小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

答えて

2

int board[4][4];int board[5][5]; :-)に置き換えてください。

+0

助けてくれてありがとう。私はそれがまったく単純だとは信じられません:) – Nick

+0

あなたは大歓迎です! –

関連する問題