⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1548 a strange lift.cpp

📁 威士忌的HDU题解.大概有260多题的源码。对于学习非常有好处。
💻 CPP
字号:
#include <cstdio> 
#include <string> 
#include <queue> 
using namespace std; 

int n,a,b,k[201]; 
bool v[201]; 
struct infor 
{ 
    int lev,t; 

    void up() 
    { 
        lev+=k[lev]; 
        t++; 
    } 
    void down() 
    { 
        lev-=k[lev]; 
        t++; 
    } 
    bool isOkay() 
    { 
        if(lev<1 || lev>n || v[lev]) 
            return false; 
        return true; 
    } 
    bool isEnd() 
    { 
        if(lev==b) 
            return true; 
        else  
            return false; 
    } 
}; 
queue<infor> SQ; 
infor ans; 


void bfs() 
{ 
    int i; 
    infor now,ct; 

    while(!SQ.empty()) 
    { 
        now=SQ.front(); 
        SQ.pop(); 
        v[now.lev]=true; 
         
        if(now.isEnd()) 
        { 
            ans=now; 
            return ; 
        } 
        ct=now;ct.up(); 
        if(ct.isOkay()) 
            SQ.push(ct); 
         
        ct=now;ct.down(); 
        if(ct.isOkay()) 
            SQ.push(ct); 
    } 
} 

int main() 
{ 
    int i,j; 
    infor it; 

    while(scanf("%d",&n)==1 && n) 
    { 
        scanf("%d %d",&a,&b); 
        memset(v,0,sizeof(v)); 
        for(i=1;i<=n;i++) 
            scanf("%d",&k[i]); 

        while(!SQ.empty()) 
            SQ.pop(); 

        it.lev=a; 
        it.t=0; 
        ans.t=-1; 

        SQ.push(it); 
        bfs(); 
         
        printf("%d\n",ans.t); 
    } 
    return 0; 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -