第一道同时用BFS和DFS两种方法做出来的题目
最大的注意点就是判断是否经历过该楼层
#include<bits/stdc++.h> using namespace std; int n,a,b; int dis[201],f[201]; queue<int> q; bool check(int x){ return x>=1&&x<=n; } void bfs() { int t; while(!q.empty()){ int p=q.front(); q.pop(); if(p==b){ cout<<dis[b]; return; } t=p+f[p]; if(check(t)&&dis[t]==0){//注意进行判断是否已经经历过这个楼层 dis[t]=dis[p]+1; q.push(t); } t=p-f[p]; if(check(t)&&dis[t]==0){ dis[t]=dis[p]+1; q.push(t); } } cout<<-1; } int main() { cin>>n>>a>>b; for (int i = 1; i <= n; i++){ cin>>f[i]; } q.push(a); dis[a]=0; bfs(); return 0; }