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

좋은 웹페이지 즐겨찾기