如图,怎么用数据结构来表示这个图呢?最常用是用一个二维矩阵来存储。如下图所示,0表示自己到自己,1表示两点直接有连线,∞表示没有连接。
这种表示法称为图的邻接矩阵表示法
可以看到得到的二维矩阵是对称的,这是因为图是没有方向的。
下面程序实现深度优先搜索算法遍历图
#include "pch.h"
#include<stdio.h>
#include<stdlib.h>
using namespace std;
const int P_Num = 5;
#define N 10000
int iTreeMap[P_Num][P_Num] = {
0,1,1,N,1,
1,0,N,1,N,
1,N,0,N,1,
N,1,N,0,N,
1,N,1,N,0
};
bool book[P_Num] = {false};
int sum = 0;
void dfs(int cur)
{
printf("%d ", cur+1);
sum++;
if (sum == P_Num)
{
return;
}
for (int i=0; i<P_Num; i++)
{
//有路径到下个点并且没走过
if (iTreeMap[cur][i] == 1 && !book[i])
{
book[i] = true;
dfs(i);
}
}
}
int main()
{
book[0] = true;
dfs(0);
return 0;
}
结果为: