一、求所有顶点到s顶点的最小步数
1 //BFS宽度优先搜索
2 #include<iostream>
3 using namespace std;
4 #include<queue>
5 #define MAX 10000
6 void BFS(int a[5][5],int s,int n)//从(si,sj)出发能到的位置以及距离
7 {
8 int *flag=new int[n];//顶点是否被遍历过,0未遍历,1已入队,2已出队
9 int *dist=new int[n];
10 int i;
11 for(i=0;i<n;i++)
12 {
13 flag[i]=0;//未被遍历
14 dist[i]=MAX;
15 }
16 dist[s]=0;//到本身的距离为0
17 queue<int> Q;
18 Q.push(s);flag[s]=1;//s入队
19 while(Q.size())
20 {
21 int tmp=Q.front();Q.pop();//头元素取出
22 for(i=0;i<n;i++)
23 if(a[tmp][i] && !flag[i]) //有边且没遍历
24 {
25 dist[i]=dist[tmp]+1;
26 Q.push(i);
27 flag[i]=1;
28 }
29 }
30 for(i=0;i<n;i++)
31 cout<<dist[i]<<' '<<endl;
32
33 }
34 int main()
35 {
36 int n=5;
37 int a[5][5]={
38 1,0,1,1,0,
39 0,1,0,1,1,
40 1,0,1,0,0,
41 1,1,0,1,0,
42 0,1,0,0,1};//是否有边,1有边,0无边
43 BFS(a,1,n);
44 return 0;
45 }