采用邻接矩阵表示无向图,完成图的创建、图的深度优先遍历、图的广度优先遍历操作。其中图的顶点信息是字符型,图中顶点序号按字符顺序排列。排列。
代码如下:
}
#include <iostream>
002.
using
namespace
std;
003.
const
int
Maxsize = 30;
004.
template
<
class
T>
005.
class
Mgraph
006.
{
007.
public
:
008.
Mgraph();
009.
void
Plist ();
010.
void
Dfstraverse(
int
v);
011.
void
Bfstraverse(
int
v);
012.
T vertex[Maxsize];
013.
int
arc[Maxsize][Maxsize];
014.
int
vertexNum, arcNum;
015.
void
creat();
016.
};
017.
template
<
class
T>
018.
Mgraph<T>::Mgraph ()
019.
{
020.
creat ();
021.
}
022.
template
<
class
T>
023.
void
Mgraph<T>::creat ()
024.
{
025.
int
n, e, i, j, k;
026.
char
a[30];
027.
cin >> n >> e;
028.
vertexNum = n;
029.
arcNum = e;
030.
for
(i = 0; i < vertexNum; i++)
031.
{
032.
cin >> a[i];
033.
}
034.
for
(i = 0; i < vertexNum; i++)
035.
vertex[i] = a[i];
036.
for
(i = 0; i < vertexNum; i++)
037.
for
(j = 0; j < vertexNum; j++)
038.
arc[i][j] = 0;
039.
for
(k = 0; k < arcNum; k++)
040.
{
041.
cin >> i >> j;
042.
arc[i][j] = 1;
043.
arc[j][i] = 1;
044.
}
045.
}
046.
template
<
class
T>
047.
void
Mgraph<T>::Plist()
048.
{
049.
int
i, j;
050.
for
(i = 0; i < vertexNum; i++)
051.
{
052.
cout << vertex[i] <<
" "
;
053.
}
054.
cout << endl;
055.
for
(i = 0; i < vertexNum; i++)
056.
{
057.
for
(j = 0; j < vertexNum; j++)
058.
{
059.
cout << arc[i][j] <<
" "
;
060.
}
061.
cout << endl;
062.
}
063.
}
064.
int
visited[Maxsize];
065.
template
<
class
T>
066.
void
Mgraph<T>::Dfstraverse(
int
v)
067.
{
068.
int
j;
069.
cout << vertex[v] <<
" "
;
070.
visited[v] = 1;
071.
for
(j = 0; j < vertexNum; j++)
072.
{
073.
if
(arc[v][j] == 1 && visited[j] == 0)
074.
{
075.
Dfstraverse(j);
076.
}
077.
}
078.
}
079.
int
visited1[Maxsize];
080.
template
<
class
T>
081.
void
Mgraph<T>::Bfstraverse(
int
v)
082.
{
083.
int
Q[30];
084.
int
front, rear, j;
085.
front = rear = -1;
086.
cout << vertex[v] <<
" "
;
087.
visited1[v] = 1;
088.
Q[++rear] = v;
089.
while
(front != rear)
090.
{
091.
v = Q[++front];
092.
for
(j = 0; j < vertexNum; j++)
093.
{
094.
if
(arc[v][j] == 1 && visited1[j] == 0)
095.
{
096.
cout << vertex[j] <<
" "
;
097.
visited1[j] = 1;
098.
Q[++rear] = j;
099.
}
100.
}
101.
}
102.
}
103.
int
main ()
104.
{
105.
Mgraph<
char
>ma;
106.
int
i;
107.
if
(ma.vertexNum == 0)
108.
return
0;
109.
ma.Plist();
110.
for
(i = 0; i < ma.vertexNum; i++)
111.
{
112.
if
(visited[i] == 0)
113.
ma.Dfstraverse(i);
114.
}
115.
cout<< endl;
116.
for
(i = 0; i < ma.vertexNum; i++)
117.
{
118.
if
(visited1[i] == 0)
119.
ma.Bfstraverse(i);
120.
}
121.
cout << endl;
122.
return
0;
123.
}