1.邻接矩阵
char vertex[100];
int arc[100][100];
int flag[100];
int n,m;
void creat()
{
cout<<"请输入顶点数和边关系数:";
cin>>n>>m;
cout<<"请依次输入所有顶点:\n";
for(int i=0;i<n;i++)cin>>vertex[i];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j)arc[i][j]=0;
else arc[i][j]=-1;
}
}
cout<<"请依次输入所有边关系:\n";
for(int i=0;i<m;i++)
{
char c1,c2;cin>>c1>>c2;
int f1=-1,f2=-1;
for(int j=0;j<n;j++)
{
if(vertex[j]==c1)f1=j;
if(vertex[j]==c2)f2=j;
}
arc[f1][f2]=arc[f2][f1]=1;
}
}
void bfs()
{
queue<char>q;
for(int i=0;i<n;i++)
{
if(flag[i]==0)
{
q.push(vertex[i]);
cout<<vertex[i]<<" ";
break;
}
}
while(!q.empty())
{
char c=q.front();
q.pop();
int f1=-1;
for(int i=0;i<n;i++)
{
if(vertex[i]==c)
{
f1=i,flag[i]=1;
break;
}
}
for(int i=0;i<n;i++)
{
if(arc[f1][i]==1&&flag[i]==0)
{
q.push(vertex[i]);
cout<<vertex[i]<<" ";
flag[i]=1;
}
}
}
for(int i=0;i<n;i++)
{
if(flag[i]==0)
{
bfs();
break;
}
}
}
int main()
{
creat();
memset(flag,0,sizeof(flag));
cout<<"bfs:";
bfs();
cout<<"\n";
return 0;
}
2.邻接表
typedef struct edgenode
{
int adjvex;
struct edgenode *next;
}edgenode,*edgetree;
typedef struct vextexnode
{
char data;
edgenode *firstedge;
}vextexnode,*vextextree;
int n,m;
vextexnode adjlist[100];
int flag[100];
void createadjlist()
{
cout<<"请输入顶点数和边关系数:";
cin>>n>>m;
cout<<"请依次输入所有顶点:\n";
for(int i=0;i<n;i++)
{
char c;cin>>c;
adjlist[i].data=c;
adjlist[i].firstedge=NULL;
}
cout<<"请依次输入所有边关系:\n";
for(int i=0;i<m;i++)
{
char c1,c2;cin>>c1>>c2;
for(int i=0;i<n;i++)
{
if(adjlist[i].data==c1)
{
edgetree p=new edgenode;
if(adjlist[i].firstedge==NULL)
{
adjlist[i].firstedge=p;
p->next=NULL;
for(int j=0;j<n;j++)
{
if(adjlist[j].data==c2)
{
p->adjvex=j;
break;
}
}
}
else
{
edgetree q=adjlist[i].firstedge;
while(q->next)q=q->next;
q->next=p;
p->next=NULL;
for(int j=0;j<n;j++)
{
if(adjlist[j].data==c2)
{
p->adjvex=j;
break;
}
}
}
}
}
}
}
void bfs()
{
queue<vextexnode>q;
for(int i=0;i<n;i++)
{
if(flag[i]==0)
{
q.push(adjlist[i]);
cout<<adjlist[i].data<<" ";
flag[i]=1;
break;
}
}
while(!q.empty())
{
edgetree p=q.front().firstedge;
q.pop();
for(;p!=NULL;p=p->next)
{
if(flag[p->adjvex]==0)
{
flag[p->adjvex]=1;
cout<<adjlist[p->adjvex].data<<" ";
q.push(adjlist[p->adjvex]);
}
}
}
for(int i=0;i<n;i++)
{
if(flag[i]==0)
{
bfs();
break;
}
}
}
int main()
{
createadjlist();
memset(flag,0,sizeof(flag));
cout<<"bfs:";
bfs();
cout<<"\n";
return 0;
}