一、BFS
#include<iostream>
#include<queue>
using namespace std;
const int max_num = 100;
class BFS{
public:
typedef int VertexType;
typedef int EdgeType;
BFS();
void create_graph();
void bfs_traverse();
private:
EdgeType arc[max_num][max_num];
bool visited[max_num];
queue<EdgeType> que; //辅助队列
int vertex_num;
int edge_num;
};
BFS::BFS(){
for (int i = 0; i < max_num; i++){
for (int j = 0; j < max_num; j++){
arc[i][j] = 0;
}
}
memset(visited, false, sizeof(visited));
while (!que.empty())
que.pop();
}
void BFS::create_graph(){
int i, j, k;
cout << "请输入图的顶点数和边数:" << endl;
cin >> vertex_num >> edge_num;
for (i = 0; i < edge_num; i++){
cout << "输入边(vj,vk)上的上标j,下标k" << endl;
cin >> j >> k;
arc[j][k] = arc[k][j] = 1;
}
}
void BFS::bfs_traverse(){
for (int i = 0; i < vertex_num; i++){
if (!visited[i]){
visited[i] = true;
cout << i << " ";
que.push(i);
while (!que.empty()){
int k = que.front();
que.pop();
for (int j = 0; j < vertex_num; j++){
if (arc[k][j] == 1 && !visited[j]){
visited[j] = true;
cout << j << " ";
que.push(j);
}
}
}
}
}
}
int main(){
BFS bfs;
bfs.create_graph();
bfs.bfs_traverse();
return 0;
}
二、DFS
#include<iostream>
using namespace std;
const int max_num = 100;
class DFS{
public:
typedef int VertexType;
typedef int EdgeType;
DFS();
void create_graph();
void dfs(int i);
void dfs_traverse();
private:
EdgeType arc[max_num][max_num];
bool visited[max_num];
int vertex_num;
int edge_num;
};
DFS::DFS(){
for (int i = 0; i < max_num; i++){
for (int j = 0; j < max_num; j++){
arc[i][j] = 0;
}
}
memset(visited, false, sizeof(visited));
}
void DFS::create_graph(){
int i, j, k;
cout << "请输入图的顶点数和边数:" << endl;
cin >> vertex_num >> edge_num;
for (i = 0; i < edge_num; i++){
cout << "输入边(vj,vk)上的上标j,下标k" << endl;
cin >> j >> k;
arc[j][k] = arc[k][j] = 1;
}
}
void DFS::dfs(int i){
visited[i] = true;
cout << i << " ";
for (int j = 0; j < vertex_num; j++){
if (arc[i][j] == 1 && !visited[j])
dfs(j); //对未访问的邻接顶点递归调用
}
}
void DFS::dfs_traverse(){
for (int i = 0; i < vertex_num; i++){
if (!visited[i])
dfs(i);
}
}
int main(){
DFS dfs;
dfs.create_graph();
dfs.dfs_traverse();
return 0;
}