#include <stdio.h>
#include <stdlib.h>
typedef struct Graph{
char* vertexes;
int** arcs;
int vertexNum;
int arcNum;
}Graph;
Graph* initGraph(int vertexNum){
Graph* G=(Graph*)malloc(sizeof (Graph));
G->vertexes=(char*)malloc(sizeof(char)*vertexNum);
G->arcs=(int**)malloc(sizeof(int*)*vertexNum);
for(int i=0;i<vertexNum;i++){
G->arcs[i]=(int*)malloc(sizeof (int)*vertexNum);
}
G->vertexNum=vertexNum;
G->arcNum=0;
return G;
}
void createGraph(Graph* G,char* vertexes,int *arcs){
for(int i=0;i<G->vertexNum;i++){
G->vertexes[i]=vertexes[i];
for(int j=0;j<G->vertexNum;j++){
G->arcs[i][j]=*(arcs+i*G->vertexNum+j);
if(G->arcs[i][j] != 0){
G->arcNum++;
}
}
}
G->arcNum>>1;
}
void DFS(struct Graph* G,int* visited,int index){
printf("%c\t",G->vertexes[index]);
visited[index] = 1;
for(int i=0;i<G->vertexNum;i++){
if(G -> arcs[index][i] == 1 && !visited[i]){
DFS(G,visited,i);
}
}
}
int main(){
Graph* G=initGraph(5);
int *visited = (int*)malloc(sizeof (int)*G->vertexNum);
for(int i = 0;i < G -> vertexNum;i++){
visited[i]=0;
}
int arcs[5][5]={
0,1,1,1,0,
1,0,1,1,1,
1,1,0,0,0,
1,1,0,0,1,
0,1,0,1,0
};
createGraph(G,"ABCDE",(int*)arcs);
DFS(G,visited,0);
printf("\n");
return 0;
}