天勤高分笔记 DFS 邻接矩阵
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
#define maxSize 50
#define OK 1
typedef int VertexType;
typedef int EdgeType;
typedef struct
{
VertexType vexs[maxSize];
EdgeType arc[maxSize][maxSize];
int n;
}MGraph;
bool visited[maxSize];
void CreateMGraph(MGraph &G)
{
int i, j;
cin >> G.n;
for (i = 0; i < G.n; i++)
{
G.vexs[i] = i;
}
for (i = 0; i < G.n; i++)
{
for (j = 0; j < G.n; j++)
{
cin >> G.arc[i][j];
}
}
}
void DFS(MGraph G, int i)
{
int j;
visited[i] = 1;
printf("%d ", G.vexs[i]);
for (j = 0; j < G.n; j++)
{
if (G.arc[i][j] == 1 && !visited[j])
{
DFS(G, j);
}
}
}
void DFSTraverse(MGraph G)
{
int i;
for (i = 0; i < G.n; i++)
{
visited[i] = 0;
}
for (i = 0; i < G.n; i++)
{
if (!visited[i])
{
DFS(G, i);
}
}
}
int main()
{
MGraph G;
CreateMGraph(G);
DFSTraverse(G);
printf("\n");
return 0;
}
输入输出案例
4
0 1 0 1
1 0 0 0
0 0 0 1
1 0 1 0
output
0 1 3 2