ACM第二次練習—1013&1014

題意:在一個N層高的樓有一個奇怪的電梯,在每一層只能上升或下降一個特定的層數,中間不會停止,在給定的條件下,問能不能到達指定樓層,可以到達的話返回轉操作次數,不可以的話返回-1。

思路:這個題問能不能實現,所以用最快的速度找到可行解就可以,所以用廣度優先搜索。

感想:第一道廣搜題,有很多點不會。

代碼:

#include <cstdio>  
#include <cstdlib>  
#include <cstring>  
#include <cmath>  
#include <queue>  
#include <climits>  
  
using namespace std;  
  
const int MAX = 202;  
int flr[MAX],ans;  
int dist[MAX];  
int n,b;  
  
void dfs(int s,int cnt){  
    if(s>n || s<1)return;  
    if(s==b){  
        if(cnt<ans){  
            ans = cnt;  
            return;  
        }  
    }  
    if(cnt>=dist[s])return;  
    dist[s] = cnt;  
    dfs(s+flr[s],cnt+1);  
    dfs(s-flr[s],cnt+1);  
}  
  
int main(){  
    //freopen("in.txt","r",stdin);  
  
    int a,i,cnt;  
    while(scanf("%d",&n)!=EOF && n){  
        scanf("%d %d",&a,&b);  
        for(i=1;i<=n;++i){  
            scanf("%d",&flr[i]);  
            dist[i] = INT_MAX - 10;  
        }  
        cnt = 0;  
        ans = INT_MAX;  
        dfs(a,cnt);  
        if(ans==INT_MAX){  
            printf("-1\n");  
        }else{  
            printf("%d\n",ans);  
        }  
    }  
  
    return 0;  
}  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章