定义结点
struct MGraph
{
int vexs[MAXVEX]; //顶点数
int arc[MAXVEX][MAXVEX]; //邻接矩阵
int numVertex, numEdges; //定点数 边数
深度优先遍历
图示
参考代码
bool visited[MAX];
void DFS(MGraph G, int i)
{
cout << G.vexs[i] << " ";
visited[i] = true;
for (int j = 0; j < G.numVertex; ++j)
{
if (G.arc[i][j] == 1 && !visited[j])
DFS(G, j);
}
}
void DFSTranverse(MGraph G)
{
for (int i = 0; i < G.numVertex; ++i)
visited[i] = false;
for (int i = 0 ; i < G.numVertex; ++i) //如果是连通图,只执行一次
{
if (!visited[i])
DFS(G, i);
}
}
广度优先遍历
图示
参考代码
void BFSTranverse(MGraph G)
{
queue<int> q;
bool visited[G.numVertex];
for (int i = 0; i < G.numVertex; ++i)
visited[i] = false;
for (int i = 0; i < G.numVertex; ++i)
{
if (!visited[i])
{
cout << G.vexs[i] << " ";
q.push(i);
visited[i] = true;
while (!q.empty())
{
int k = q.top();
q.pop();
for (int j = 0; j < G.numVertex; ++j)
{
if (G.arc[i][j] == 1 && !visitied(j))
{
cout << G.vexs[j] << " ";
visited[j] = true;
q.push(j);
}
}
}
}
}//for
}