hdu1548A strange lift

来源:互联网 发布:c语言图形界面编程 编辑:程序博客网 时间:2024/06/15 00:18

题目链接:click here~

题目解析:一般的广搜,枚举所有的状态就可以了。

代码如下:

#include<stdio.h>#include<string.h>#include<queue>using namespace std;int lift[205];int vis[205];int s,t,n;struct node{    int cur;    int time;};void bfs(){    memset(vis,0,sizeof(vis));    node node1,node2;    queue<node>q;    node1.cur=s;    node1.time=0;    q.push(node1);    vis[node1.cur]=1;    while(!q.empty())    {        node2=q.front();        q.pop();        if(node2.cur==t)        {            printf("%d\n",node2.time);            return ;        }        node1.cur=node2.cur+lift[node2.cur];        if(node1.cur>=1&&node1.cur<=n&&!vis[node1.cur])        {            node1.time=node2.time+1;            q.push(node1);            vis[node1.cur]=1;        }        node1.cur=node2.cur-lift[node2.cur];        if(node1.cur>=1&&node1.cur<=n&&!vis[node1.cur])        {            node1.time=node2.time+1;            q.push(node1);            vis[node1.cur]=1;        }    }    printf("-1\n");}int main(){    while(scanf("%d",&n)!=EOF&&n)    {        scanf("%d%d",&s,&t);        for(int i=1;i<=n;i++)          scanf("%d",&lift[i]);        bfs();    }    return 0;}


0 0
原创粉丝点击