0

私は現在ナイツツアープロジェクトに取り組んでいます。私の最終的な目標は、バックトラッキング (スタックの実装による) と 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 関数を使用してステップを戻し、別の動きを続ける必要があります。

ヘルプ、修正、開始場所、またはその他の提案があれば、本当に感謝しています。私はとても立ち往生しています..

4

1 に答える 1