邻接矩阵
#include<bits/stdc++.h>
using namespace std;
const int MaxSize = 100;
int visited[MaxSize] = { 0 };
string vertex[MaxSize];
int edge[MaxSize][MaxSize];
int vertexNum, edgeNum;
void ini(string a[], int n, int e) {
int i, j, k;
vertexNum = n; edgeNum = e;
for (i = 0; i < vertexNum; i++) {
vertex[i] = a[i];
}
for (i = 0; i < vertexNum; i++) {
for (j = 0; j < vertexNum; j++) {
edge[i][j] = 0;
}
}
for (k = 0; k < edgeNum; k++) {
cin >> i >> j;
edge[i-1][j-1] = 1;
edge[j-1][i-1] = 1;
}
//for (i = 0; i < vertexNum; i++) {
// cout << a[i] << endl;
//}
}
void DFS(int v) {
//cout << vertexNum << endl;
cout << vertex[v]<<" ";
visited[v] = 1;
for (int j = 0; j < vertexNum; j++) {
if (edge[v][j] == 1 && visited[j] == 0) {
DFS(j);
}
}
}
void BFS(int v) {
int w, j, Q[MaxSize];
int front = -1, rear = -1;
cout << vertex[v]<<" ";
visited[v] = 1;
Q[++rear] = v;
while (front != rear) {
w = Q[++front];
for (j = 0; j < vertexNum; j++) {
if (edge[w][j] == 1 && visited[j] == 0) {
cout << vertex[j]<<" ";
visited[j] = 1;
Q[++rear] = j;
}
}
}
}
int main() {
int cin1, cin2;
cin >> cin1 >> cin2;
string ch[] = { "v1","v2","v3","v4","v5","v6" };
//char ch[] = { 'A','B','C','D','E' };
ini(ch, cin1, cin2);
for (int i = 0; i < MaxSize; i++) {
visited[i] = 0;
}
//DFS(0);
//cout << endl;
//for (int i = 0; i < MaxSize; i++) {
// visited[i] = 0;
//}
//BFS(0);
//for (int i = 0; i < MaxSize; i++) {
// visited[i] = 0;
//}0 1
//1 2
//2 3
//3 4
//4 0
//0 2
//0 1
BFS(0);
return 0;
}
邻接表
#include<bits/stdc++.h>
using namespace std;
struct EdgeNode {
int adjvex;
EdgeNode* next;
};
struct VertexNode {
string vertex;
EdgeNode* firstEdge;
};
const int MaxSize = 100;
int visited[MaxSize] = { 0 };
VertexNode adjlist[MaxSize];
int vertexNum;
int edgeNum;
void ini(string a[], int n, int e) {
/*for (int i = 0; i < n; i++) {
cout << a[i] << endl;
}*/
//cout << e << endl;
//int i, j, k;
//EdgeNode* s = NULL;
//vertexNum = n;
//edgeNum = e;
//for (i = 0; i < vertexNum; i++) {
// adjlist[i].vertex = a[i];
// adjlist[i].firstEdge = NULL;
//}
//for (k = 0; k < edgeNum; k++) {
// cin >> i >> j;
// s = new EdgeNode; s->adjvex = j;
// s->next = adjlist[i-1].firstEdge;
// adjlist[i-1].firstEdge = s;
//}
int i, j, k;
EdgeNode* s = NULL;
vertexNum = n; edgeNum = e;
for (i = 0; i < vertexNum; i++) {
adjlist[i].vertex = a[i];
adjlist[i].firstEdge = NULL;
}
//for (i = 0; i < vertexNum; i++) {
// cout<<adjlist[i].vertex;
//}
for (k = 0; k < edgeNum; k++) {
cin >> i >> j;
int aa = i-1 ;
int bb = j-1;
s = new EdgeNode; s->adjvex = bb;
s->next = adjlist[aa].firstEdge;
adjlist[aa].firstEdge = s;
}
}
void dfs(int v) {
int j;
EdgeNode* p = NULL;
cout << adjlist[v].vertex << " ";
visited[v] = 1;
p = adjlist[v].firstEdge;
while (p != NULL) {
j = p->adjvex;
if (visited[j] == 0) {
dfs(j);
}
p = p->next;
}
}
void bfs(int v) {
int w, j, Q[MaxSize];
int front = -1;
int rear = -1;
EdgeNode* p = NULL;
cout << adjlist[v].vertex<<" ";
visited[v] = 1;
Q[++rear] = v;
while (front != rear) {
w = Q[++front];
p = adjlist[w].firstEdge;
while (p != NULL) {
j = p->adjvex;
if (visited[j] == 0) {
cout << adjlist[j].vertex << " ";
visited[j] = 1;
Q[++rear] = j;
}
p = p->next;
}
}
}
int main() {
int cin1, cin2;
cin >> cin1 >> cin2;
string ch[] = { "v1","v2","v3","v4","v5","v6" };
//char ch[] = { 'A','B','C','D','E' };
ini(ch, cin1, cin2);
for (int i = 0; i < MaxSize; i++) {
visited[i] = 0;
}
dfs(0);
/*cout << endl;
for (int i = 0; i < MaxSize; i++) {
visited[i] = 0;
}
bfs(0);
for (int i = 0; i < MaxSize; i++) {
visited[i] = 0;
}
bfs(0);*/
//bfs(0);
return 0;
}