此算法为“用邻接矩阵表示的深度优先搜索算法”简化版,DFS算法已在注释中标出,可进行对比。
visited数组用于记录遍历到的节点,若visited[i]=1和visite[j]=1,则i和j节点连通。IsOrNot函数和DFS函数如下
void IsOrNot(GraphMatrix *graphMatrix,int *visited,int source)
{
int j;
visited[source]=1;//若i节点被访问到,visited[i]=1
for(j=0;j<graphMatrix->size;j++)
{
if(graphMatrix->graph[source][j]!=MAX&&!visited[j])
IsOrNot(graphMatrix,visited,j);
}
}
/*void DFS(GraphMatrix*graphMatrix,int* visited,int source)
{
int j;
visited[source]=1;
printf("%d",source)
for(j=0;j<graphMatrix;j++)
{
if(graphMatrix->graph[soure][j]!=MAX&&!visited[j])
DFS(graphMatrix,visited,j);
}
}*/
完整代码如下
#include <stdio.h>
#include <stdlib.h>
#define MAX 0