您的位置:首页 > 其它

链式前向星存储实现BFS

2016-11-24 16:45 423 查看




代码:

/*************************************************************************
> File Name: store.cpp
> Author: SIU
> Created Time: 2016年11月24日 星期四 13时34分39秒
************************************************************************/

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int V=1000;
const int E=10000;
int cnt=0;
struct Edge
{
int next;
int to;
//int w;
};
Edge edge[E];
int Head[V];
void add(int u,int v)
{
//edge[cnt].w=w;
edge[cnt].to=v;
edge[cnt].next=Head[u];
Head[u]=cnt++;
return ;
}
struct node
{
int x;
int count;
}que[10010];
int main()
{
int en,vn,s,e;
scanf("%d%d%d%d",&vn,&en,&s,&e);
int s1,e1;
memset(Head,-1,sizeof(Head));
for(int i=1;i<=en;i++)
{
scanf("%d%d",&s1,&e1);
add(s1,e1);
}
/*for(int i=1;i<=vn;i++)
{
for(int j=Head[i];j!=-1;j=edge[j].next)
{
printf("%d %d\n",i,edge[j].to);
}
}*/
int visit[10010];
memset(visit,0,sizeof(visit));
int head=1,tail=1;
que[tail].x=s;
que[tail].count=0;
visit[s]=1;
tail++;
int flag=0;
while(head<tail)
{
for(int i=Head[head];i!=-1;i=edge[i].next)
{
if(visit[edge[i].to]==0)
{
que[tail].x=edge[i].to;
que[tail].count=que[head].count+1;
visit[que[tail].x]=1;
if(que[tail].x==e)
{
flag=1;
break;
}
tail++;
}
}
if(flag==1)
break;
head++;
}
printf("%d\n",que[tail].count);
return 0;
}


PS:我是作为有向图做的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bfs