P1135 奇怪的电梯
这题懂了之后就很简单了,感觉和一维的迷宫差不多
先看样例吧
5 1 5
3 3 1 2 5
要从一楼上到五楼
一楼是直接上(下)三层,因为没有-2楼,所以上到4楼
再从四楼下到二楼
最后从二楼上到五楼
一共用了三步
上代码吧:
#include<cstdio> #include<iostream> using namespace std; int n,a,b,ans=9999999; int o[205]; int book[205]; void dfs(int x,int sum) { if(x==b) { ans=min(ans,sum);//找出最小的步数 } if(sum>ans) { return;//如果比以前多,就返回上一步 } book[x]=1; if(x+o[x]<=n&&book[x+o[x]]!=1)//判断是否越界和以前是否走过 { dfs(x+o[x],sum+1);//上楼,步数+1 } if(x-o[x]>=1&&book[x-o[x]]!=1) { dfs(x-o[x],sum+1);//下楼,步数+1 } book[x]=0; } int main() { cin>>n>>a>>b; for(int i=1;i<=n;i++) { cin>>o[i]; } book[a]=1;//不可以走回起点 dfs(a,0); if(ans!=9999999) { cout<<ans<<endl; } else//如果没有方法,输出-1 { cout<<"-1"<<endl; } return 0; }
就这样愉快的AC了(*^_^*)