私はこのナイトツアーの問題を解決する必要があります。 NxN行列とナイトの座標を入力する必要があります。ここで、(1,1)は左下の要素です。今プログラムが正しく動作しますが、私の問題は、タスクには多くの入力があることがあるということです。だから私はmain関数にwhileループを追加しています(入力を継続して解決することができますが、最初の入力の後にプログラムがコンソールに書き込むことはできません)私にできる事は、コンソールを停止しているあなたは私の問題で私を助けてください事前に感謝をナイトツアーが正しく動作しない
#include <iostream>
using namespace std;
const int MAXN = 10;
const int MAXD = 10;
const int maxDiff = 8;
const int diffX[MAXD] = { 1, 1, -1, -1, 2, -2, 2, -2 };
const int diffY[MAXD] = { 2, -2, 2, -2, 1, 1, -1, -1 };
unsigned board[MAXN][MAXN];
unsigned newX, newY;
void printBoard(int n)
{
int i, j;
for (i = n; i > 0; i--) {
for (j = 0; j < n; j++)
{
if (j == 0)
{
cout << board[i - 1][j];
}
else
{
cout << " " << board[i - 1][j];
}
}
cout << endl;
}
}
void nextMove(int X, int Y, int i, int n)
{
int k;
board[X][Y] = i;
if (i == n * n)
{
printBoard(n);
return;
}
for (k = 0; k < maxDiff; k++)
{
newX = X + diffX[k]; newY = Y + diffY[k];
if ((newX >= 0 && newX < n && newY >= 0 && newY < n) && (0 == board[newX][newY]))
{
nextMove(newX, newY, i + 1, n);
}
}
board[X][Y] = 0;
}
int main()
{
int n;
int startX;
int startY;
int br = 0;
while (cin >> n >> startX >> startY)
{
if (n < 4 || n > 10)
{
break;
}
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
board[i][j] = 0;
}
}
nextMove(startX - 1, startY - 1, 1, n);
}
return 0;
}
編集:。?。どうやら私は条件を間違えIマトリックスは、しかし2 < nは< 10でなければなりません。プログラムが5未満のマトリクスで動作しない条件を変更してください。何が間違っているのですか?
しばらくいくつかのポインタで
global_flag=false
を初期化:可変長配列無無ありません。符号付きの値と符号なしの値の比較もno-noです。 –デバッガを使用します。どのテストケースが失敗するのですか?期待される成果/行動は何ですか?実際のアウトプット/ビヘイビアとは何ですか?どの声明が問題を引き起こしていますか?あなたの質問を回答で編集してください。 –