#include
#include
#include
#include
#define MAXVEX 20
typedef char VertexType;
using namespace std;
typedef struct EdgeNode{
int adjvex;
struct EdgeNode *next;
}EdgeNode;
typedef struct VertexNode{
VertexType data;
EdgeNode *firstedge;
}VertexNode, AdjList[MAXVEX];
typedef struct{
AdjList adjlist;
int numVertexes, numEdges;
}GraphAdjList;
int get_index(AdjList arr, char m){
for(int i = 0; i < MAXVEX; i++){
if(arr[i].data == m)
return i;
}
return -1;
}
void Create(GraphAdjList &G){
int i, j, k;
EdgeNode *p;
cout << "请输入顶点数和边数:" << endl;
cin >> G.numVertexes >> G.numEdges;
cout << "输入顶点信息:" << endl;
for(i = 0; i < G.numVertexes; i++){
cin >> G.adjlist[i].data;
G.adjlist[i].firstedge = NULL;
}
cout << "输入边(vi,vj)中的下标i,j:" << endl;
for(k = 0; k < G.numEdges; k++){
cin >> i >> j;
p = (EdgeNode *)malloc(sizeof(EdgeNode));
p->adjvex = j;
p->next = G.adjlist[i].firstedge;
G.adjlist[i].firstedge = p;
p = p = (EdgeNode *)malloc(sizeof(EdgeNode));
p->adjvex = i;
p->next = G.adjlist[j].firstedge;
G.adjlist[j].firstedge = p;
}
}
void print(GraphAdjList &G){
cout << "邻接表为:" << endl;
EdgeNode *p;
for(int i = 0; i < G.numVertexes; i++){
p = G.adjlist[i].firstedge;
while(p){
cout << "<" << G.adjlist[i].data << "," << G.adjlist[p->adjvex].data << ">";
p = p->next;
}
cout << endl;
}
}
void dfs(GraphAdjList &G, int v, int* visited){
visited[v] = 1;
cout << G.adjlist[v].data;
EdgeNode *p = G.adjlist[v].firstedge;
while(p){
if(!visited[p->adjvex])
dfs(G, p->adjvex, visited);
p = p->next;
}
return ;
}
void dfsSearch(GraphAdjList &G, char input){
int visited[MAXVEX] = {0};
for(int i = 0; i < G.numVertexes; i++){
visited[i] = 0;
}
dfs(G, get_index(G.adjlist, input), visited);
for(int i = 0; i < G.numVertexes; i++){
if(!visited[i]){
dfs(G, i, visited);
}
}
}
void bfs(GraphAdjList &G, int v, int* visited){
int u, w;
EdgeNode *p;
queue<int> Q;
cout << G.adjlist[v].data;
visited[v] = 1;
Q.push(v);
while(!Q.empty()){
u = Q.front();
Q.pop();
p = G.adjlist[u].firstedge;
while(p){
w = p->adjvex;
if(!visited[w]){
cout << G.adjlist[w].data;
visited[w] = 1;
Q.push(w);
}
p = p->next;
}
}
}
void bfsSearch(GraphAdjList &G, char input){
int visited[MAXVEX] = {0};
for(int i = 0; i < G.numVertexes; i++){
visited[i] = 0;
}
bfs(G, get_index(G.adjlist, input), visited);
for(int i = 0; i < G.numVertexes; i++){
if(!visited[i]){
bfs(G, i, visited);
}
}
}
int main(){
GraphAdjList G;
Create(G);
print(G);
cout << "输入深度搜索的起始点:" << endl;
char input;
cin >> input;
dfsSearch(G, input);
cout << endl << "输入广度搜索的起始点:" << endl;
cin >> input;
bfsSearch(G, input);
}

- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
连通图案例

非连通图案例
