poj 1208 (링크)
1832 단어 데이터 구조
제목:https://www.cnblogs.com/zhurb/p/5839701.html)
길이 n, 0 ~ n - 1 번호 가 있 는 상자 와 위 치 를 정 하고 시작 번호 가 있 는 상 자 는 같은 번호 의 위치 에 놓 습 니 다.
일련의 조작 이 있 습 니 다.
move a onto b, a, b 위의 상 자 를 초기 위치 로 돌려 놓 고 a 를 b 상자 에 올 립 니 다.
move a over b, a 위의 상 자 를 초기 위치 로 돌려 놓 고 a 를 b 상자 맨 위 에 올 려 놓 습 니 다.
pile a onto b, b 위의 상 자 를 초기 위치 로 돌려 놓 고 a 와 a 위의 상 자 를 함께 b 상자 에 올 립 니 다.
pile a over b, a 와 a 의 상 자 를 b 상자 맨 위 에 올 려 놓 습 니 다.
마지막 모든 위치의 상 자 를 출력 해 달라 고 요청 합 니 다.
문제 풀이:
어렵 지 않 았 어야 했 는데 기초 가 부실 한 내 가 너무 못 해서.....................................................
5 개의 배열 을 열 어 각 위치의 바 텀 박스 와 꼭대기 상자, 그리고 각 상자 의 위치, 상층, 하층 을 기록 하고 시 뮬 레이 션 을 하면 됩 니 다.
주의:
30 분 동안 실 수 를 했 습 니 다.
블록 전 체 를 이동 할 때 현재 상자 의 pos 뿐만 아니 라 그 위 에 있 는 모든 상자 의 pos 도 고 쳐 야 합 니 다!!!
#include
#include
#include
#include
using namespace std;
int n,a,b;
int up[30],down[30],pos[30];
int top[30],base[30];
inline void move(int val,int des) {
int pre=pos[val],tmp=top[pre];
if (down[val]==-1) base[pre]=-1;
up[down[val]]=-1;
top[pre]=down[val];
// pos[val]=des;
for (int i=val;~i;i=up[i])
pos[i]=des;
down[val]=top[des];
up[top[des]]=val;
top[des]=tmp;
if (down[val]==-1) base[des]=val;
}
inline void clear(int val) {
for (int i=up[val];~i;i=up[i])
move(i,i);
// for (int i=top[pos[val]];i^val;i=down[i])
// move(i,i);
}
int main() {
// freopen("poj 1208.in","r",stdin);
memset(up,-1,sizeof(up));
memset(down,-1,sizeof(down));
scanf("%d",&n);
for (int i=0;i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.