題解 luogu P1135 【奇怪的電梯】
阿新 • • 發佈:2018-12-02
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; }