2016春季练习——bfs简单题

来源:互联网 发布:图像语义分割 python 编辑:程序博客网 时间:2024/04/28 18:37

来源:POJ3278

就是一个bfs,一开始还想,我要是vis标记了,以后怎么办。。。果然还是没有离开dfs的影响。。。还要多多学习。

还有一个注意点,就是如何记录我们的步数,这个用数组的方法有推广意义,注意多多学习。

代码:

#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;const int MAXN= 100000+10;bool vis[MAXN];int step[MAXN];queue<int>q;int n,k;int bfs(){    int temp,n1;    int cnt=0,i;    step[cnt]=0;    if(n==k)return 0;    while(!q.empty()){        temp=q.front();        q.pop();        for(i=0;i<3;i++){            if(i==0) n1=temp+1;            else if(i==1) n1=temp-1;            else if(i==2) n1=temp*2;            if(n1>MAXN||n1<0) continue;            if(!vis[n1]){                if(n1==k){                    return step[temp]+1;                }                else{                    step[n1]=step[temp]+1;                    q.push(n1);                    vis[n1]=true;                }            }        }    }}int main(){while(scanf("%d%d",&n,&k)!=EOF){        memset(vis,false,sizeof(vis));        memset(step,0,sizeof(step));        while(!q.empty())q.pop();        q.push(n);        vis[n]=0;        cout<<bfs()<<endl;}return 0;}


1 0
原创粉丝点击