1. 程式人生 > >題解 luogu P1135 【奇怪的電梯】

題解 luogu P1135 【奇怪的電梯】

DFS題

首先,思想是一個佇列,一個數組判樓層是否重複,還有一個樓層陣列記錄當前樓層數

(我之前把head和樓層混為一談,導致RE無數遍)

#include<bits/stdc++.h>
using namespace std;
int t[250][3];
int b[250];
bool k[250];//三個陣列
int main()
{
	int i,j,x,y,n,a,c,head=1,tail=1;
	cin>>n>>a>>c;
    for (i=1;i<=n;i++)cin>>b[i];
    t[1][1]=a;//初始位置
    while (t[head][1]!=c)
    {
    	for (i=1;i<=2;i++)
    	{
    	    if (i==1&&k[t[head][1]+b[t[head][1]]]==0&&t[head][1]+b[t[head][1]]<=250)
			{
				t[++tail][1]=t[head][1]+b[t[head][1]];
				t[tail][2]=t[head][2]+1;
				k[t[tail][1]]=1;
			}//第一種走法,陣列t[tail][1]為當前樓層數,t[tail][2]為當前步驟。
			else if (i==2&&k[t[head][1]-b[t[head][1]]]==0&&t[head][1]-b[t[head][1]]>=0)
			{
				t[++tail][1]=t[head][1]-b[t[head][1]];
				t[tail][2]=t[head][2]+1;
				k[t[tail][1]]=1;
			}		
    	}//第二種走法
        head++;
        if (head>250){cout<<-1;return 0;}//一定要記得走不到退出!!
	}
	cout<<t[head][2];
	return 0;
}

THE ENDING!