コード例 #1
0
void DFSShowGraphVertex(ALGraphDFS*graph,int startV){
	Stack stack;
	int visitV=startV;
	int nextV;

	StackInit(&stack);
	VisitVertex(graph,visitV);
	SAPush(&stack,visitV);

	while(LDFirst(&(graph->list[visitV]),&nextV)==TRUE){
		int visitFlag=FALSE;
		if(VisitVertex(graph,nextV)==TRUE){
			SAPush(&stack,visitV);
			visitV=nextV;
			visitFlag=TRUE;
		}
		else{
			while(LDNext(&(graph->list[visitV]),&nextV)==TRUE){
				if(VisitVertex(graph,nextV)==TRUE){
					SAPush(&stack,visitV);
					visitV=nextV;
					visitFlag=TRUE;
					break;
				}
			}
		}
		if(visitFlag==FALSE){
			if(SABIsEmpty(&stack)==TRUE) break;
			else visitV=SABPop(&stack);
		}
	}
	memset(graph->visit,0,sizeof(int)*graph->numV);
}
コード例 #2
0
void BFSShowGraphVertex(ALGraphBFS *graph,int startV){
	Queue queue;
	int visitV=startV;
	int nextV;

	CQueueInit(&queue);
	VisitVertex(graph,visitV);
	while(LDFirst(&(graph->list[visitV]),&nextV)==TRUE){
		if(VisitVertex(graph,nextV)==TRUE)
			CEnqueue(&queue,nextV);
		while(LDNext(&(graph->list[visitV]),&nextV)==TRUE){
			if(VisitVertex(graph,nextV)==TRUE) CEnqueue(&queue,nextV);
		}
		if(CQIsEmpty(&queue)==TRUE) break;
		else visitV=CDequeue(&queue);
	}
	memset(graph->visit,0,sizeof(int)*graph->numV);
}
コード例 #3
0
ファイル: BridgeNum.c プロジェクト: BuDashka/UniWork_course1
void VisitVertex(struct Graph *G, int *par, int *comp, int v)
{
    int i, component = 1;
    for (comp[v] = component, i = 0; i < G[v].size; i++)
    {
        if (comp[G[v].arr[i]] == -1 && par[G[v].arr[i]] != v)
        {
            VisitVertex(G, par, comp, G[v].arr[i]);
        }
    }
}
コード例 #4
0
ファイル: BridgeNum.c プロジェクト: BuDashka/UniWork_course1
int main()
{
    struct Queue q;// = malloc(14000000000 * sizeof(int));
    int v;
    int i;
    int n, m;
    scanf("%d", &n);
    scanf("%d", &m);
    char *last = calloc(n, sizeof(char));
    int *par = calloc(n, sizeof(int));
    int *component = calloc(n, sizeof(int));
    struct Graph *G = malloc(n * sizeof(struct Graph));
    
    for (i = 0; i < n;)
    {
        G[i].size = last[i] = 0;
        component[i++] = -1;
    }
    for (i = m; i > 0; i--)
    {
        int a, b;
        scanf("%d %d", &a, &b);
        G[a].arr[G[a].size++] = b;
        G[b].arr[G[b].size++] = a;
    }
    int comp = 1;
    for (q.head = q.tail = i = 0; i < n; q.head = q.tail = 0, i++)
    {
        if (!last[i])
        {
            comp--;
            DFSRec(G, &q, par, i, last);
        }
        for (v = -1; QueueEmpty(&q);)
        {
            v = q.mas[q.head++];
            if (component[v] == -1)
            {
                VisitVertex(G, par, component, v);
                comp++;
            }
        }
    }
    printf("%d\n", comp - 1);
    //free(q);
    free(G);
    free(last);
    free(par);
    free(component);
    return 0;
}