joj 1034: Worm Turns
이 문 제 는 뱀 을 게 걸 스 럽 게 먹 는 게임 과 유사 하 다. 웜 이동 을 모 의 해 몇 번 째 단 계 를 보고 보드 를 뛰 쳐 나 가 몇 번 째 단 계 를 자신 에 게 달 려 가 모두 완성 하 라 고 한다.그래서 알고리즘 은 시 뮬 레이 션 입 니 다.
#include<iostream>
#include<list>
#include<string>
using namespace std;
struct Square{
int x;
int y;
};
const int ROWS = 51;
const int COLS = 51;
list<Square> worm;
void init_worm(){
worm.clear();
int i = 25;
int j = 11;
for(; j <= 30; j++){
Square s;
s.x = i;
s.y = j;
worm.push_front(s);
}
}
bool in_bound(int i,int j){
return i >= 1 && i < ROWS-1 && j >= 1 && j <= COLS-1;
}
bool run_into_self(int x, int y){
list<Square>::iterator it = worm.begin();
list<Square>::reverse_iterator rit = worm.rbegin();
if(rit->x == x && rit->y == y)//deal with the tail specially
return false;
for(; it != worm.end(); it++){
if(it->x == x && it->y == y){
return true;
}
}
return false;
}
bool move(int i,int j,int current_step){
Square head = worm.front();
int x = head.x + i;
int y = head.y + j;
if( !in_bound(x,y) ){
cout << "The worm ran off the board on move " << current_step << "." << endl;
return false;
}else if( run_into_self(x,y) ){
cout << "The worm ran into itself on move " << current_step << "." << endl;
return false;
}else{
head.x = x;
head.y = y;
worm.push_front(head);
worm.pop_back();
return true;
}
}
int main(){
int move_steps;
while(cin >> move_steps,move_steps){
init_worm();
int i;
bool flag;
string moves;
cin >> moves;
for(i = 1; i <= move_steps; i++){
flag = true;
char ch = moves[i-1];
switch(ch){
case 'E':
if(!move(0,1,i))
flag = false;
break;
case 'W':
if(!move(0,-1,i))
flag = false;
break;
case 'N':
if(!move(-1,0,i))
flag = false;
break;
case 'S':
if(!move(1,0,i))
flag = false;
break;
defalut:
break;
}
if(!flag)
break;
}
if(i == move_steps + 1)
cout << "The worm successfully made all " << move_steps << " moves." << endl;
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HDOJ/HDU 1113 Word Amalgamation (사전 순서 ~ 지도)a dictionary, which consists of at least one and at most 100 words, one per line; a line containing XXXXXX, which signal...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.