현재 기사단 투어 프로젝트를 진행 중입니다. 내 목표는 궁극적으로 스택을 구현하여 역 추적과 Warnsdorff의 발견 적 방법을 사용하여이 프로젝트를 만드는 것입니다. push 및 pop과 같이 이미 생성 된 스택 함수가있는 라이브러리는 사용할 수 없습니다. 또한 재귀를 사용하여 문제를 해결할 수 없습니다. 그렇게 말하면서, 나는 지금 당장 막혔다. 그리고 나의 다음 큰 이정표는 단지 역 추적으로 문제를 해결하는 것이 될 것이다.기사단이 연결된 목록에 배열을 전달하는 중
나는이 모든 설탕 코팅을하지 않을거야,하지만 지금 내 코드는 하나의 큰 혼란입니다. 프로그램을 실행하는 데 필요한 모든 도구를 거의 만들었지 만 지금은 모든 요소를 하나로 묶어두기 만하면됩니다.
#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) 또는 여러 값을 전달하는 방법을 찾아야합니다. 또한 현재 작업하고있는 바운드 검사를 생성해야합니다 (기사가 이동 한 지점에서 보드로 이동하지 않도록하십시오). 그런 다음 마지막으로 기사가 붙어 있다면, 내가 만든 팝업 기능을 사용하여 단계로 돌아가서 다른 이동을 계속 시도해야합니다.는 정말 정말 도움이, 수정, 시작하는 장소 또는 주어진 다른 제안을 주셔서 감사합니다! 나는 너무 붙어있어.
동적으로 증가하는 링크드리스트가 필요하지 않을 수도 있습니다. 스택의 최대 크기는 'N * N'(보드의 총 제곱 수)입니다. 그래서 당신은 하나의 배열을 사용할 수 있으며 현재 배열의 수는 "스택"되어 있습니다. –
@BenVoigt 그가 2D 좌표 또는 평평한 평면을 사용하기로 선택했는지 여부와 상관없이 좌표 평면은 부적합합니다. 그는 각 이동에 대해 코디를 저장할 수있는 방법이 필요합니다. –