您的位置:首页 > 其它

sdut2139图结构练习——BFS——从起始点到目标点的最短步数

2012-07-11 16:15 381 查看
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2139

BFS 借助队列 将节点的邻接点依次存入队中

View Code

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int k[1001][1001],f[1001],n,m,p = 0,w;
typedef struct node
{
int num,y;
}st;
st q[1001];
void inque(int x)
{
p++;
q[p].y = x;
f[x] = 1;
}
int main()
{
int i,j,a,b;
while(scanf("%d%d", &n, &m)!=EOF)
{
memset(k,0,sizeof(k));
memset(f,0,sizeof(f));
memset(q,0,sizeof(q));
p = 0;
int flag = 0;
for(i = 1 ; i <= m ; i++)
{
scanf("%d%d", &a, &b);
k[a][b] = 1;
}
inque(n);
q[p].num = 0;
w = 0;
do
{
w++;
for(i = 1 ; i <= n ; i++)
{
if(k[q[w].y][i] == 1&&f[i] == 0)
{
inque(i);
q[p].num = q[w].num+1;
if(i == 1)
{
flag = 1;
break;
}
}
}
if(flag == 1)
break;
}while(p!=w);
if(flag == 1)
printf("%d\n",q[p].num);
else
printf("NO\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐