2014-02-22 1 views
1

현재 기사단 투어 프로젝트를 진행 중입니다. 내 목표는 궁극적으로 스택을 구현하여 역 추적과 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) 또는 여러 값을 전달하는 방법을 찾아야합니다. 또한 현재 작업하고있는 바운드 검사를 생성해야합니다 (기사가 이동 한 지점에서 보드로 이동하지 않도록하십시오). 그런 다음 마지막으로 기사가 붙어 있다면, 내가 만든 팝업 기능을 사용하여 단계로 돌아가서 다른 이동을 계속 시도해야합니다.

는 정말 정말 도움이, 수정, 시작하는 장소 또는 주어진 다른 제안을 주셔서 감사합니다! 나는 너무 붙어있어.

+0

동적으로 증가하는 링크드리스트가 필요하지 않을 수도 있습니다. 스택의 최대 크기는 'N * N'(보드의 총 제곱 수)입니다. 그래서 당신은 하나의 배열을 사용할 수 있으며 현재 배열의 수는 "스택"되어 있습니다. –

+0

@BenVoigt 그가 2D 좌표 또는 평평한 평면을 사용하기로 선택했는지 여부와 상관없이 좌표 평면은 부적합합니다. 그는 각 이동에 대해 코디를 저장할 수있는 방법이 필요합니다. –

답변

0

내가 똑바로 해줄 게. 이동을 취소 할 수있는 스택 구조를 구현하는 데 어려움이 있습니다.

C++ 정말 내 특기는 아니지만 여기에 내가 좌표를 저장하는 구조체를 정의 스택

  1. 접근 줄 방법 ​​(및 역 추적 정보)
  2. 업데이트 '노드'포인터를 저장하는 새로운 구조체의 인스턴스에 추가합니다.
  3. 'push()'정의를 업데이트하여 사용하십시오.
  4. 'pop()'정의를 업데이트하여 반환하십시오.
  5. 이익 ...
관련 문제