#include <iostream>
#include<queue>
#include<string>
using namespace std;
int visited[100];
typedef struct
{
string ch;
}phen[100];
typedef struct
{
int arc[30][30];
int arcnum;
int vexnum;
phen arcs;
}MGraph;
void setgraph(MGraph &G)
{
cout<<"请输入顶点数和边数:";
cin>>G.vexnum>>G.arcnum;
for(int i=0;i<G.vexnum;i++)
for(int j=0;j<G.vexnum;j++)
G.arc[i][j]=32767;
cout<<"请输入各个顶点的信息:"<<endl;
for(int i=0;i<G.vexnum;i++)
cin>>G.arcs[i].ch;
int u,v;
cout<<"请输入每条边的起始点和终点共"<<G.arcnum<<"条边:"<<endl;
for(int i=0;i<G.arcnum;i++)
{
cin>>u>>v;
G.arc[u][v]=1;
G.arc[v][u]=1;
}
}
void DFS(MGraph G,int n)
{
visited[n]=1;
cout<<G.arcs[n].ch<<" ";
for(int i=0;i<G.vexnum;i++)
if(G.arc[n][i]==1&&visited[i]==0)
DFS(G,i);
}
void DFStraverse(MGraph G)
{
for(int i=0;i<G.vexnum;i++)
visited[i]=0;
for(int i=0;i<G.vexnum;i++)
if(visited[i]==0)
DFS(G,i);
}
void BFS(MGraph G,int n)
{
queue<int> q;
q.push(n);
while(!q.empty())
{
int k=q.front();
q.pop();
if(visited[k]==1)
continue;
visited[k]=1;
cout<<G.arcs[k].ch<<" ";
for(int i=0;i<G.vexnum;i++)
if(G.arc[k][i]==1&&visited[i]==0)
q.push(i);
}
}
void BFStraverse(MGraph G)
{
for(int i=0;i<G.vexnum;i++)
visited[i]=0;
for(int i=0;i<G.vexnum;i++)
if(visited[i]==0)
BFS(G,i);
}
int main()
{
MGraph G;
setgraph(G);
DFStraverse(G);
cout<<endl;
BFStraverse(G);
return 0;
}
/*
0 1
0 2
1 3
1 4
2 5
2 6
3 4
3 7
5 6*/
#include<queue>
#include<string>
using namespace std;
int visited[100];
typedef struct
{
string ch;
}phen[100];
typedef struct
{
int arc[30][30];
int arcnum;
int vexnum;
phen arcs;
}MGraph;
void setgraph(MGraph &G)
{
cout<<"请输入顶点数和边数:";
cin>>G.vexnum>>G.arcnum;
for(int i=0;i<G.vexnum;i++)
for(int j=0;j<G.vexnum;j++)
G.arc[i][j]=32767;
cout<<"请输入各个顶点的信息:"<<endl;
for(int i=0;i<G.vexnum;i++)
cin>>G.arcs[i].ch;
int u,v;
cout<<"请输入每条边的起始点和终点共"<<G.arcnum<<"条边:"<<endl;
for(int i=0;i<G.arcnum;i++)
{
cin>>u>>v;
G.arc[u][v]=1;
G.arc[v][u]=1;
}
}
void DFS(MGraph G,int n)
{
visited[n]=1;
cout<<G.arcs[n].ch<<" ";
for(int i=0;i<G.vexnum;i++)
if(G.arc[n][i]==1&&visited[i]==0)
DFS(G,i);
}
void DFStraverse(MGraph G)
{
for(int i=0;i<G.vexnum;i++)
visited[i]=0;
for(int i=0;i<G.vexnum;i++)
if(visited[i]==0)
DFS(G,i);
}
void BFS(MGraph G,int n)
{
queue<int> q;
q.push(n);
while(!q.empty())
{
int k=q.front();
q.pop();
if(visited[k]==1)
continue;
visited[k]=1;
cout<<G.arcs[k].ch<<" ";
for(int i=0;i<G.vexnum;i++)
if(G.arc[k][i]==1&&visited[i]==0)
q.push(i);
}
}
void BFStraverse(MGraph G)
{
for(int i=0;i<G.vexnum;i++)
visited[i]=0;
for(int i=0;i<G.vexnum;i++)
if(visited[i]==0)
BFS(G,i);
}
int main()
{
MGraph G;
setgraph(G);
DFStraverse(G);
cout<<endl;
BFStraverse(G);
return 0;
}
/*
0 1
0 2
1 3
1 4
2 5
2 6
3 4
3 7
5 6*/