私は現在ナイツツアープロジェクトに取り組んでいます。私の最終的な目標は、バックトラッキング (スタックの実装による) と Warnsdorff のヒューリスティックを使用してこのプロジェクトを作成することです。push や pop など、スタック関数が作成済みのライブラリは使用できません。また、再帰を使用して問題を解決することもできません。そうは言っても、私は今かなり行き詰まっており、次の大きなマイルストーンは、後戻りするだけで問題を解決することです.
これをシュガー コーティングするつもりはまったくありませんが、今のところ私のコードは 1 つの大きな混乱です。プログラムを実行するために必要なツールはほぼすべて作成しましたが、あとはすべての部品を組み合わせるだけです。
以下は私のコードです:
#include<iostream>
using namespace std;
class linkedList{
struct node
{
int data;
node *next;
};
node *top;
public:
linkedList()
{
top = NULL;
}
void push(int coordinates)
{
node *p = new node;
p -> data = coordinates;
p -> next = top;
top = p;
}
int pop()
{
node *temp = top;
top = temp -> next;
return temp -> data;
}
int display()
{
cout<<"\n"<< top -> data;
top = top-> next;
}
};
// Linked List ================================================
class Board{
public:
int next;
int status[8][8];
Board();
void print();
};
Board::Board(){
for(int i=0; i<8; i++){
for(int j=0; j<8; j++){
status[i][j] = -1;
}
}
}//constructor
void Board::print(){
for (int j=0; j<8; j++){
for(int i=0; i<8;i++){
cout << status[i][j] << " ";
}
cout << endl << endl;
}
}
//BOARD========================================================
class Knight {
private:
public:
int vertical[8] = {2,-2,1,-1,2,-2,1,-1}; // possible knight moves x coordinate
int horizontal[8] = {1,1,2,2,-1,-1,-2,-2}; // possible knight move y coordinate
int counter;
int currentPos[2];
Knight();
};
Knight::Knight(){
currentPos[0] = 7; // x-coordiante
currentPos[1] = 7; // y-coordinate
counter = 0;
}//constructor
/* Use this later
int Knight::changePos(int i,int j){
Knight::currentPos[0] = (Knight::currentPos[0] + i);
Knight::currentPos[1] = (Knight::currentPos[1] + j);
counter++;
return counter;
*/
int main(){
Board b;
Knight k;
b.status[k.currentPos[0]][k.currentPos[1]] = k.counter;
b.print();
linkedList obj;
int coordinates;
}
したがって、この時点での私の考えは、次のことを行うことです。
水平方向と垂直方向の配列 (騎士の可能な動き) を使用して、騎士の現在の位置を変更するループを作成します。位置が変更されると、カウンターがインクリメントされ、-1 が現在のカウンター値に置き換えられます。騎士が移動したら、作成したプッシュ関数を使用して、新しい座標の情報をリンク リストに渡す必要があります。これを行うには、プッシュする配列 (x,y) または複数の値を渡す方法を見つける必要があります。また、現在取り組んでいるバウンド チェックを作成する必要もあります (ナイトが行ったことのある場所に移動せず、ボードから外れないようにします)。最後に、騎士が動けなくなった場合は、作成した pop 関数を使用してステップを戻し、別の動きを続ける必要があります。
ヘルプ、修正、開始場所、またはその他の提案があれば、本当に感謝しています。私はとても立ち往生しています..