有点疑惑,这个题目用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;
}