hdu 1458 bfs模板化写法

来源:互联网 发布:aspnet源码 编辑:程序博客网 时间:2024/06/06 03:16

背景:1.编译错误:next和系统命名冲突。2.wa:起点大于楼层的情况未考虑。wawawa了一下午,我把走过就把内容设为-1的方法,改为由flag数组标记是否访问就对了。然后实验,把访问过的标记为-100000,也ac!!!说明题目中ki存在小于0的情况!!!!!存在-1!!!!!与题意不符!!wa了一下午。。。

我的代码:

#include<cstdio>#include<iostream>#include<cstring>#include<queue>using namespace std;int floor[299],n,e;struct state{int x,count;}now,next1;void bfs(state temp){     queue<state> q;     temp.count=0;     q.push(temp);     while(!q.empty()){         now=q.front();         if(now.x == e){            printf("%d\n",now.count);            return;         }else{             if(floor[now.x]){                 next1.x=now.x+floor[now.x];                 if(next1.x >= 1 && next1.x <= n && floor[next1.x]!= -1000000 ){                    next1.count=now.count+1;                    q.push(next1);                 }             }             if(floor[now.x]){                 next1.x=now.x-floor[now.x];                 if(next1.x >= 1 && next1.x <= n && floor[next1.x] != -1000000){                    next1.count=now.count+1;                    q.push(next1);                 }             }             floor[now.x]=-1000000;             q.pop();         }     }     printf("-1\n");     return;}int main(void){    while(scanf("%d",&n),n){        scanf("%d%d",&now.x,&e);        memset(floor,-1000000,sizeof(floor));        for(int i=1;i <= n;i++) scanf("%d",&floor[i]);        if(now.x < 1 || now.x > n) printf("-1\n");        else bfs(now);    }    return 0;}


0 0
原创粉丝点击