我目前正在从事骑士旅游项目。我的最终目标是使用回溯(通过实现堆栈)和Warnsdorff的启发式方法来创建此项目。我不允许使用任何具有已创建的堆栈功能(例如推入式和弹出式)的库。我也不允许使用递归解决问题。话虽这么说,我现在还是很困惑,我的下一个重要里程碑是仅通过回溯来解决问题。

我根本不会为此加糖,但是现在我的代码是一团糟。我已经创建了使程序运行所需的所有工具,但是现在我只需要将所有部分放在一起即可。

以下是我的代码:

#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函数来退后一步并尝试继续执行其他操作。

我非常感谢您提供的任何帮助,更正,开始的地方或其他建议!我好困..

最佳答案

让我说清楚。您难以实现允许撤消移动的堆栈结构。

C ++并不是我的专长,但是这就是我要使用Stack的方式


定义一个存储坐标的结构(以及可能的回溯信息)
更新“节点”以存储指向新结构实例的指针。
更新“ push()”定义以使用它。
更新'pop()'定义以返回它。
利润...

关于c++ - 骑士巡回传递数组到链表等等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21961214/

10-10 20:11