コード例 #1
0
ファイル: l01q04.c プロジェクト: marcosf63/CC
Digraph DIGRAPHconstruct (char *nomeDoArquivo) {
  FILE *arq;
  Digraph G;
  int V;
  Vertex v, w;
  char ch;
  int i, numeroLinhas = 4;

  arq = fopen(nomeDoArquivo, "r");
  printf("%s\n", nomeDoArquivo);  
  if ( arq != NULL) printf("ok\n");
 
  printf("numero de linhas %d", numeroLinhas);

  G = DIGRAPHinit(3);
  DIGRAPHinsertA(G, 0, 1);
  DIGRAPHinsertA(G, 1, 2);
  DIGRAPHinsertA(G, 2, 0);


  
   
  fclose(arq);  
  return G;
} 
コード例 #2
0
ファイル: test_matrix.c プロジェクト: gustavoem/bcc
int main () {
    Digraph d;
    d = DIGRAPHinit (6);
    printf ("Teste de inserção de arco: ");
    DIGRAPHinsertA (d, 1, 2);
    test_feedback (d->A == 1);
    DIGRAPHinsertA (d, 2, 0);
    DIGRAPHinsertA (d, 2, 3);
    printf ("Teste de grau de saída de vértice: ");
    test_feedback (DIGRAPHoutdeg (d, 2) == 2);
    printf ("Teste de grau de entrada de vértice: ");
    test_feedback (DIGRAPHindeg (d, 2) == 1);
    DIGRAPHdestroy (d);
    printf ("Teste de DIGRAPHrand1 (): ");
    d = DIGRAPHrand1 (10, 5);
    test_feedback (d->A == 5 && d->V == 10);
    DIGRAPHdestroy (d);
    printf ("Teste de DIGRAPHrand2 (): ");
    d = DIGRAPHrand2 (10, 5);
    test_feedback (d->A > 0 && d->V == 10);
    DIGRAPHdestroy (d);
    printf ("Teste de GRAPHrand1 (): ");
    d = GRAPHrand1 (10, 7);
    test_feedback (d->A == 14 && d->V == 10);
    DIGRAPHdestroy (d);
    printf ("Teste de GRAPHrand2 (): ");
    d = GRAPHrand2 (10, 7);
    test_feedback (d->A > 1 && d->V == 10);
    DIGRAPHdestroy (d);
    return 0;
}
コード例 #3
0
ファイル: DIGRAPHlists.c プロジェクト: gustavoem/bcc
/* REPRESENTAÇÃO POR LISTAS DE ADJACÊNCIAS: a função GRAPHrand2 ()
constrói um grafo aleatório com vértices 0..V-1 e número esperado de
arestas igual a E. (As duas pontas de cada aresta devem ser
diferentes.) A função supõe que V >= 2 e E <= V*(V-1)/2. (Código
inspirado no Program 17.8 de Sedgewick.) */
Digraph GRAPHrand2 (int V, int E) {
    Vertex v, w;
    double p = (double) 2 * E / V / (V-1);
    Digraph G = DIGRAPHinit (V);
    for (v = 0; v < V; v++)
        for (w = 0; w < V; w++)
            if (v != w && rand () < p * (RAND_MAX + 1.0))
            {
                DIGRAPHinsertA (G, v, w);
                DIGRAPHinsertA (G, w, v);
            }
    return G;
}
コード例 #4
0
ファイル: DIGRAPHlists.c プロジェクト: gustavoem/bcc
/* REPRESENTAÇÃO POR LISTAS DE ADJACÊNCIAS: A função GRAPHrand1 ()
constrói um grafo aleatório com vértices 0..V-1 e exatamente E arestas
(As duas pontas de cada aresta devem ser diferentes.). A função
supõe que E <= V*(V-1)/2. Se E for próximo de V*(V-1)/2, a função pode
consumir muito tempo. (Código inspirado no Programa 17.7 de
Sedgewick.) */
Digraph GRAPHrand1 (int V, int E) {
    Vertex v, w;
    Digraph G = DIGRAPHinit (V);
    while (G->A / 2 < E) {
        v = randV (G);
        w = randV (G);
        if (v != w)
        {
            DIGRAPHinsertA (G, v, w);
            DIGRAPHinsertA (G, w, v);
        }
    }
    return G;
}
コード例 #5
0
ファイル: main.c プロジェクト: BarbaraCoelho/Grafo
int main()
{
    Digraph A = DIGRAPHinit(DIGRAPH_VALUES);
    static int lbl[DIGRAPH_VALUES];     // Variavel para a busca em profundidade
    DIGRAPHinsertA(A,0,0);
    DIGRAPHinsertA(A,1,2);
    DIGRAPHinsertA(A,2,2);
    DIGRAPHinsertA(A,3,5);
    DIGRAPHinsertA(A,4,5);
    DIGRAPHinsertA(A,5,3);
    DIGRAPHinsertA(A,4,5);
    DIGRAPHshow(A);

    int line,col;
    for(line=0;line<6;line++)
    {
        printf("\n");
        for(col=0;col<6;col++)
            printf("%d",A->adj[line][col]);
    }

    printf("\n\n");
    DOT_OUTPUT(A);

    printf("\nResultado: %d",DIGRAPHreach(A,2,2,lbl));

    return 0;
}
コード例 #6
0
ファイル: DIGRAPHlists.c プロジェクト: gustavoem/bcc
/* REPRESENTAÇÃO POR LISTAS DE ADJACÊNCIAS: A função DIGRAPHrand1 ()
constrói um digrafo aleatório com vértices 0..V-1 e exatamente A
arcos. (As duas pontas de cada arco devem ser diferentes.) A função
supõe que A <= V*(V-1). Se A for próximo de V*(V-1), a função pode
consumir muito tempo. (Código inspirado no Programa 17.7 de
Sedgewick.) */
Digraph DIGRAPHrand1 (int V, int A) {
    Vertex v, w;
    Digraph G = DIGRAPHinit (V);
    while (G->A < A) {
        v = randV (G);
        w = randV (G);
        if (v != w)
            DIGRAPHinsertA (G, v, w);
    }
    return G;
}
コード例 #7
0
ファイル: matriz.c プロジェクト: marcosf63/Grafos
Digraph DIGRAPHaleatorio(int V, int A){
  Vertex v, w;
  
  Digraph G = DIGRAPHinit(V);
  
  srand(time(NULL));
  
  while (G->A < A) {
    v = rand() % V;
    w = rand() % V;
    DIGRAPHinsertA( G, v, w);
  }

  return G;
}
コード例 #8
0
int recebeDigrafoArbo( )
{
    int V, v, w, linha;
    Digraph G;
    fscanf( stdin, "%d", &V);
        G = DIGRAPHinit( V);
        for (linha = 0; linha < V; linha++) {
            fscanf( stdin, "%d", &v);
            while (getc(stdin) != '\n') {
                fscanf( stdin, "%d", &w);
                DIGRAPHinsertA( G, v, w);
            }
        }
    if (DIGRAPHarborescencia( G) == -1) printf("-1\n");
    return 0;
}
コード例 #9
0
ファイル: cDIGRAPHmatriz.c プロジェクト: marcosf63/Grafos
/*
Digraph DIGRAPHconstruct(){
  Digraph G;
  FILE *arq;
  int V;
  Vertex v, w;
  arq = fopen("dados.txt", "r");

  if (arq == NULL){
    printf("ERRO ao abrir\n");
    system("pause");
    exit(1);
  }

  fscanf(arq, "%d", &V);
  G = DIGRAPHinit(V);

  while(fscanf(arq, "%d %d", &v, &w) != EOF)
    DIGRAPHinsertA(G, v, w);

  fclose(arq);

  return G;
}
*/
Digraph DIGRAPHaleatorio(int V, int A){
  Vertex v, w;
  double cst;

  Digraph G = DIGRAPHinit(V);

  srand(time(NULL));

  while (G->A < A) {
    v = rand() % V;
    w = rand() % V;
    cst = (double)(rand() % 100);
    DIGRAPHinsertA( G, v, w, cst);
  }

  return G;
}
コード例 #10
0
ファイル: experimento.c プロジェクト: pedropaulovc/USP-2012-1
resultado Experimento(int V, double p) {
	int i, j;
	struct timespec M_dfs_ini, M_dfs_fim, M_bfs_ini, M_bfs_fim;
	struct timespec L_dfs_ini, L_dfs_fim, L_bfs_ini, L_bfs_fim;
	resultado ans;

	Digraph G = DIGRAPHinit(V);
	
	f (i, 0, V)
		f (j, 0, V)
			if (i != j && rand() <  p*RAND_MAX)
				DIGRAPHinsertA (G, i, j);

	clock_gettime(CLOCK_REALTIME, &M_dfs_ini);
	f (i, 0, 8)
		DIGRAPHdfsM (G);
	clock_gettime(CLOCK_REALTIME, &M_dfs_fim);
	ans.m_dfs = diff_timespec(M_dfs_fim, M_dfs_ini); 
	
	clock_gettime(CLOCK_REALTIME, &L_dfs_ini);
	f (i, 0, 8)
		DIGRAPHdfsL (G);
	clock_gettime(CLOCK_REALTIME, &L_dfs_fim);
	ans.l_dfs = diff_timespec(L_dfs_fim, L_dfs_ini);
	
	clock_gettime(CLOCK_REALTIME, &M_bfs_ini);
	f (i, 0, V)
		f(j, 0, 8)
			DIGRAPHbfsM(G, i);
	clock_gettime(CLOCK_REALTIME, &M_bfs_fim);
	ans.m_bfs = diff_timespec(M_bfs_fim, M_bfs_ini);
	
	clock_gettime(CLOCK_REALTIME, &L_bfs_ini);
	f (i, 0, V)
		f(j, 0, 8)
			DIGRAPHbfsL(G, i);
	clock_gettime(CLOCK_REALTIME, &L_bfs_fim);
	ans.l_bfs = diff_timespec(L_bfs_fim, L_bfs_ini);
	
	ans.arcos = G->A;
	
	DIGRAPHfree(G);
	
	return ans;
}
コード例 #11
0
int main( int argc, char *argv[]) {
   Digraph G;
   int V, arc, i, c, maxC1 = 1, maxC2 = 0, *price;
   Vertex *parent, x, y, s, t, t1, t2;
   scanf( "%i", &V); G = DIGRAPHinit( V);
   parent = malloc( G->V * sizeof( Vertex));
   price = malloc( G->V * sizeof( int)); 
   scanf( "%i", &arc); scanf( "%i %i", &s, &t);
   for (i = 0; i < arc; i++) {
      scanf( "%i %i %i", &t1, &t2, &c);
      DIGRAPHinsertA( G, t1, t2, c);
      maxC1 += c;
   }
   t1 = t2 = -1;
   imprimecabecalho();
   DIGRAPHsptD2( G, s, parent, price, -1, -1);
   if (!verificaRelaxamento( G, parent, price, s)) return 0;
   if(parent[t] != -1) {
      maxC1 = price[t];
      x = parent[t]; y = t;
      while (x != y) {
         DIGRAPHsptD2( G, s, parent, price, x, y);
         if (!verificaRelaxamento( G, parent, price, s)) return 0;
         if (price[t] > maxC2) {
            maxC2 = price[t];
            t1 = x; t2 = y;
         }
         y = x; x = parent[x]; 
      }
      printf( "priceancia de %i a %i sem remocao de arcos: %i\n", s, t, maxC1);
      if (maxC2 != 0) {
         printf( "Arco removido, cuja nova priceancia ");
         printf( "%i a %i e' maxima: %i-%i\n", s, t, t1, t2);
         printf( "Nova priceancia: %i\n", maxC2);
      }
      else printf("Nao se pode remover nenhum arco.\n");
   }
   else printf("Nao existe caminho de %i a %i.\n", s, t);
   free( parent);
   free( price);  
   return 0;
}
コード例 #12
0
ファイル: matriz.c プロジェクト: marcosf63/Grafos
Digraph DIGRAPHconstruct(){
  Digraph G;
  FILE *arq;
  int V;
  Vertex v, w;
  arq = fopen("dados.txt", "r");

  if (arq == NULL){
    printf("ERRO ao abrir\n");
    system("pause");
    exit(1);
  }

  fscanf(arq, "%d", &V);
  G = DIGRAPHinit(V);

  while(fscanf(arq, "%d %d", &v, &w) != EOF)
    DIGRAPHinsertA(G, v, w);

  fclose(arq);

  return G;
}
コード例 #13
0
ファイル: tarefa.c プロジェクト: gorobaum/gorobaumhome
void GRAPHinsertE (Graph G, Vertex v, Vertex w, double cst) {
    DIGRAPHinsertA(G, v, w, cst); 
    DIGRAPHinsertA(G, w, v, cst);
}
コード例 #14
0
ファイル: graph.c プロジェクト: renatocf/MAC0328
void GRAPHinsertA(Graph G, Vertex v, Vertex w)
{
    DIGRAPHinsertA(G,v,w);
    DIGRAPHinsertA(G,w,v);
}