简单的BFS A strange lift
有点疑惑,这个题目用DFS和bfs在时间复杂度上面有什么区别吗?
先把BFS的保存下来,自己写个DFS看下
#include<stdio.h> #include<string.h> #define Max 10000 typedef 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; }