从某个结点开始,先访问该结点,然后访问该结点的所有邻接点,再依次访问各邻接点的邻接点。如此进行下去,直到所有的结点都访问为止。
采用队列来实现广度优先搜索,从对头开始跑,输出对头,把新的元素放入队尾,直到队列为空
#include<iostream>
using namespace std;
char str[100];int n;int map[100][100];
int flag[100];
int tou=0,wei=0;
int dui[100];
void bfs(int x)
{
dui[wei]=x;
wei++;
cout<<str[x];
flag[x]=1;
while(tou!=wei)
{
for(int i=0;i<n;i++)
{
if(flag[i]==0&&map[dui[tou]][i]!=0)
{
cout<<str[i];
flag[i]=1;
dui[wei]=i;
wei++;
}
}
tou++;
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>str[i];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>map[i][j];
char fir;
cin>>fir;
for(int i=0;i<n;i++)
{
if(str[i]==fir)
bfs(i);
}
return 0;
}