Ich habe den Code geschrieben, um die Anzahl der verbundenen Komponenten des gerichteten Graphen zu finden.Wenn ich das Diagramm unten als meine Adjacency Matrix.It gibt die Anzahl der verbundenen Komponenten als 2 (Erste DFS: 0 -> 1-> 2, zweites DFS: 3).Abfrage über die Anzahl der verbundenen Komponenten
Aber wenn ich den Diagramm unten als meine Adjazenzmatrix
es die Anzahl der Connected Components gibt als 1 (DFS: 0-> 2-> 3-> 1). Was ich fragen möchte, ist die Berechnung der Anzahl der verbundenen Komponenten hängt davon ab, wie wir Knoten in Adjazenz-Matrix darstellen, wenn wir DFS verwenden, um die Anzahl der verbundenen Komponenten zu finden?
Code:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct Graph
{
int V;
int E;
int **Adj;
};
void AdjacencyMatrixOfGraph(struct Graph *G)
{
int u,v,i,j,w;
scanf("%d %d",&G->E,&G->V);
G->Adj = (int**)malloc(G->V*sizeof(int *));
for(i=0;i<G->V;i++)
{
G->Adj[i] = (int*)malloc(G->V*sizeof(int));
}
for(i=0;i<G->V;i++)
{
for(j=0;j<G->V;j++)
{
G->Adj[i][j] = 0;
}
}
for(i=0;i<G->E;i++)
{
scanf("%d %d",&u,&v);
G->Adj[u][v] = 1;
//G->Adj[v][u] = 1;
}
}
int Visited[1000];
void DFS(struct Graph *G,int u,int Visited[])
{
Visited[u]=1;
int v,w,i;
for(v=0;v<G->V;v++)
{
if(G->Adj[u][v] !=0 && Visited[v] == 0)
{
//printf("U is %d and V is %d\n",u,v);
Visited[v] = 1;
DFS(G,v,Visited);
}
}
}
void DFSTraversal(struct Graph *G)
{
//int Visited[G->V];
int i;
int counter = 0;
for(i=0;i<G->V;i++)
{
Visited[i] = 0;
}
for(i=0;i<G->V;i++)
{
if(!Visited[i])
{
DFS(G,i,Visited);
counter++;
}
}
printf("The Number of Connected Components is %d\n",counter);
}
int main()
{
struct Graph *graph = (struct Graph *)malloc(sizeof(struct Graph));
AdjacencyMatrixOfGraph(graph);
DFSTraversal(graph);
return 0;
}
Mein Fehler.Ich schrieb stark verbundene Komponenten anstelle von verbundenen Komponenten. Ja, der Algorithmus ist für die Anzahl der verbundenen Komponenten in gerichteten Graphen nicht stark verbundene Komponenten. Aber wie vier? –
Ich bin mir nicht sicher, wie viel Sinn es macht, von einer "verbundenen Komponente" eines gerichteten Graphen zu sprechen. Wie würdest du das definieren? Was auch immer es bedeuten mag, Ihr Algorithmus berechnet es nicht. Ihr Algorithmus würde die verbundenen Komponenten eines ungerichteten Graphen berechnen, was ein wohldefiniertes Konzept ist. – rici
Danke für die Erklärung. –