Пример #1
0
int main(){    
    Grafo *grafo = criaGrafo(8); //cria grafo com 5 vértices
        
    /*addAresta(grafo, 0, 1);
    addAresta(grafo, 1, 4);
    addAresta(grafo, 1, 2);
    addAresta(grafo, 1, 0);
    addAresta(grafo, 2, 3);
    addAresta(grafo, 3, 4);
    addAresta(grafo, 3, 0);
    addAresta(grafo, 4, 1);*/
    
    
    addAresta(grafo, 0, 1);
    addAresta(grafo, 0, 3);
    addAresta(grafo, 0, 4);
    addAresta(grafo, 1, 2);
    addAresta(grafo, 1, 0);
    addAresta(grafo, 2, 3);
    addAresta(grafo, 2, 1);
    addAresta(grafo, 3, 5);
    addAresta(grafo, 3, 2);    
    addAresta(grafo, 3, 0);
    addAresta(grafo, 4, 0);
    addAresta(grafo, 5, 7);
    addAresta(grafo, 5, 6);
    addAresta(grafo, 5, 3);
    addAresta(grafo, 6, 5);
    addAresta(grafo, 7, 5);
    
    printf("\n GRAFO DIRECIONADO - DIGRAFO"); 
    mostraGrafo(grafo);
    
    printf("\n BUSCA EM LARGURA - DIGRAFO"); 
    buscaLargura(grafo, &grafo->vetorListaAdjacencia[0]); 
        
    printf("\n\n DESTROI GRAFO"); 
    destroiGrafo(grafo);    
    mostraGrafo(grafo);
    printf("\n");
        
    return 0;
}
Пример #2
0
int main()
{
    int i;
    char strEntrada[200000];
    No *Raiz;
    pilha Pilha[10000];
    OP = (No*) malloc(sizeof(No));
    FILE *arq = fopen("string.in", "r");
    fscanf(arq,"%s",strEntrada);

    criaNo('@', &Raiz);
    Raiz = criaGrafo(strEntrada, Raiz);
    DecodificaOperacao(Raiz, Pilha);

    //for(i = 0; i<1; i++)
    while(Fim == 0 && Raiz->c != ':' && Raiz->c != '$')
    {
        OP = pop(Pilha);
        switch (OP->c)
        {
        case 'S':
            if(Verifica(3,Pilha, &Raiz))
            {
                S(Pilha, &Raiz);
                #ifdef CONT_FLAG
                    cont_S++;
                #endif
            }
            break;
        case 'K':
            K(Pilha, &Raiz);
            #ifdef CONT_FLAG
                cont_K++;
            #endif
            break;
        case 'B':
            if(Verifica(3,Pilha, &Raiz))
            {
                B(Pilha, &Raiz);
                #ifdef CONT_FLAG
                    cont_B++;
                #endif
            }
            break;
        case 'b':
            if(Verifica(3,Pilha, &Raiz))
            {
                BL(Pilha, &Raiz);
                #ifdef CONT_FLAG
                    cont_BL++;
                #endif
            }
            break;
        case 'P':
            if(Verifica(3,Pilha, &Raiz))
            {
                CL(Pilha, &Raiz);
                #ifdef CONT_FLAG
                    cont_CL++;
                #endif
            }
            break;
        case 'I':
            I(Pilha, &Raiz);
            #ifdef CONT_FLAG
                cont_I++;
            #endif
            break;
        case 'W':
            if(Verifica(3,Pilha, &Raiz))
            {
                SL(Pilha, &Raiz);
                #ifdef CONT_FLAG
                    cont_SL++;
                #endif
            }
            break;
        case 'C':
            if(Verifica(3,Pilha, &Raiz))
            {
                C(Pilha, &Raiz);
                #ifdef CONT_FLAG
                    cont_C++;
                #endif
            }
            break;
        case 'H': //Hd
            Hd(Pilha, &Raiz);
            break;
        case 'T': //Tl
            Tl(Pilha, &Raiz);
            break;
        case '*':
            MULT(Pilha, &Raiz);
            break;
        case '/':
            DIV(Pilha, &Raiz);
            break;
        case '-':
            SUB(Pilha, &Raiz);
            break;
        case '+':
            ADD(Pilha, &Raiz);
            break;
        case '^':
            POT(Pilha, &Raiz);
            break;
        default:
            Fim = 1;
            break;
        }
    }
    printf("Saida: ");
    printaGrafo(Raiz);
    printf("\n");
    printf("\nChamadas ao GC:%d\n", garbage);

#ifdef CONT_FLAG
    printf("S: %d\n",cont_S);
    printf("K: %d\n",cont_K);
    printf("I: %d\n",cont_I);
    printf("C: %d\n",cont_C);
    printf("B: %d\n",cont_B);
    printf("S': %d\n",cont_SL);
    printf("C': %d\n",cont_CL);
    printf("B': %d\n",cont_BL);
#endif

    return 0;
}
Пример #3
0
t_grafo* criaGrafoArq(char *nomeArq){
	t_grafo* g = criaGrafo();
	int i , j;
	FILE *fp, *fp2;
	fp = fopen(nomeArq, "r");
	char string[1000];
	char nome[200], dest[100], *ps;
	int ID_tarefa, executada, duracao, ini_min, pre_req, *reqs;



	fp2 = fopen("saida.txt", "w");
	
	
	//leitura dos vertices
	j = 1;
	while(fscanf(fp, "%d '%[^']' %d %d %d %d", &ID_tarefa, nome, &executada, &duracao, &ini_min, &pre_req)>0){
		
		reqs = (int*)malloc(sizeof(int)*pre_req);
		for (i = 0; i < pre_req; i++) {
			fscanf(fp, "%d", &reqs[i]);
					
		}
		fprintf(fp2, "%d %s %d %d %d %d", ID_tarefa, nome, executada, duracao, ini_min, pre_req);
		for (i = 0; i < pre_req; i++) {
			fprintf(fp2, " %d", reqs[i]);
					
		}
		fprintf(fp2, "\n");
		insereVertice(g, nome, ID_tarefa, executada, duracao, ini_min, pre_req, reqs);
		fgetc(fp);
		
		move(j, 1);
		printw("%d %s %d %d %d %d", ID_tarefa, nome, executada, duracao, ini_min, pre_req);
		for (i = 0; i < pre_req; i++) {
			printw(" %d", reqs[i]);
					
		}
		refresh();                                      
		
		
		j++;
	}
	getch();
	
	/*
	//Leitura das origens
	fscanf(fp, "%[^\n]s", string);
	j=0;
	for(i = 0; i < strlen(string); i++){
		if(string[i] != ',' && string[i] != ' '){
			nome[j] = string[i];
			j++;
		}
		else if(string[i] == ','){
			//j++;
			nome[j] = '\0';
			j=0;
			insereOrigem(g, nome);
		}	
	}
	insereOrigem(g, nome);
	fgetc(fp);
	j=0;
	//leitura das arestas
	while(fscanf(fp, "%[^\n]s", string) > 0){
		ps = strtok(string, " ,");
		strcpy(nome, ps);
		ps = strtok(NULL, " ,");
		strcpy(dest, ps);
		ps = strtok(NULL, " ,");

		insereAresta(g, nome, dest, atoi(ps));
		fgetc(fp);
	}*/

	fclose(fp);
	fclose(fp2);
	return g;
}