简单的BFS A strange lift

来源:互联网 发布:oracle数据库多少钱 编辑:程序博客网 时间:2024/05/21 11:25

有点疑惑,这个题目用DFS和bfs在时间复杂度上面有什么区别吗?

先把BFS的保存下来,自己写个DFS看下


#include<stdio.h>#include<string.h>#define Max 10000typedef struct node{int step;int ceng;}position;typedef struct {int head,tail;struct node a[Max];}queue;bool visited[205];void create(queue&);void enqueue(position,queue&);position dequeue(queue&);bool empty(queue&);int bfs(int ,int ,int ,int []);int main(){int n,m,v,i,b[205],k;while(scanf("%d",&n)&&n){memset(visited,0,sizeof(visited));scanf("%d %d",&m,&v);for(i=1;i<=n;i++)scanf("%d",&b[i]);if(v==m){printf("0\n");continue;}k=bfs(n,m,v,b);printf("%d\n",k);}return 0;}int bfs(int n,int m,int v,int b[]){position now,next;queue q;create(q);now.ceng=m;now.step=0;enqueue(now,q);while(!empty(q)){visited[now.ceng]=true;now=dequeue(q);next.ceng=now.ceng+b[now.ceng];next.step=now.step+1;if(next.ceng==v)return next.step;else if(next.ceng<=n&&next.ceng>0&&!visited[next.ceng]) {enqueue(next,q);}next.ceng=now.ceng-b[now.ceng];if(next.ceng==v){return next.step;}else if(next.ceng<=n&&next.ceng>00&&!visited[next.ceng]){enqueue(next,q);}}return -1;}void create(queue&q){q.head=q.tail=0;}void enqueue(position p,queue&q){q.a[q.tail]=p;q.tail=(q.tail+1)%Max;}position dequeue(queue&q){position p;p=q.a[q.head];q.head=(q.head+1)%Max;return p;}bool empty(queue&q){if(q.head==q.tail) return true;else return false;}



原创粉丝点击