예제 #1
0
int main(){
    uint64_t nodes = pow(2,SCALE);
    uint64_t edges = nodes*EDGEFACTOR;
    uint64_t *startVertex = malloc(edges*I64_BYTES);
    uint64_t *endVertex = malloc(edges*I64_BYTES);
    float initiator[] = {0.57,0.19,0.19,0.05};

    generate_graph(SCALE, EDGEFACTOR, startVertex, endVertex,initiator);

    char matrix[NODES][NODES] = {{0,1,0,0,0,0,0},
                                 {0,0,1,0,0,0,0},
                                 {0,0,0,1,0,0,0},
                                 {0,0,0,0,1,0,0},
                                 {0,0,0,0,0,1,0},
                                 {0,0,0,0,0,0,1},
                                 {0,0,0,0,0,0,0}};
    char parents[] = {0,0,0,0,0,0,0};
    char level[] = {0,0,0,0,0,0,0};

    double time = mytime();

    transpose_matrix(matrix);

    bfs_2d(matrix, level, parents);

    time = mytime() - time;
    printf("Time: %f\n", time/1000000);

    return 0;
}
void test(){
  Dijs solver;
  generate_graph();
  int n = 20;
  while(n--){
    int s = rand()%g.size();
    int t = rand()%g.size();
    int r1 = solver.dijsNaive(s,t,g);
    int r2 = solver.dijs(s,t,g);

    cout<<"NaiveDijs="<<r1<<" HeapDijs="<<r2<<' '<<(r1==r2?"TRUE":"FALSE")<<endl;
  }
	      
}
void test_bellmanford(){
  Dijs solver;
  BellmanFord bell;
  generate_graph();
  int n = 20;
  while(n--){
    int s = rand()%g.size();
    int t = rand()%g.size();
    int r1 = bell.bellmanford(s,t,g);
    int r2 = solver.dijs(s,t,g);

    cout<<"Bellmanford="<<r1<<" HeapDijs="<<r2<<' '<<(r1==r2?"TRUE":"FALSE")<<endl;
  }
	      
}
예제 #4
0
int main(int argc, char **argv) {
    int n, numgraphs, mode, iso,i;
    double p = 0.0;
    int kreg = 0, m = 0;
    char* prefix;
    

    char * filename = malloc(20*sizeof(char));
    if (argc != 7) {
        printf("'test_gen n numgraphs (p || m || kreg) mode iso fname' with :\n");
        printf("n : number of vertices, numgraphs : number graphs to generate\n");
        printf("p and m : as in G(n,p) and G(n,m), kreg : degree when k-regular\n");
        printf("mode : 1 for G(n,p), 2 for G(n,m), 3 for G(n,m) multigraph\n");
        printf("     : 4 for k-regular, 5 for k-regular multigraphs\n");
        printf("iso  : 1 for generating graphs isomorphic to the first generated\n");
        printf("prefix  : name prefix for generated graphs\n");
        return 1;
    } /* redundant test but it is better this way*/
    n = atoi(argv[1]);
    numgraphs = atoi(argv[2]);
    p = atof(argv[3]);
    m = atoi(argv[3]);
    kreg = atoi(argv[3]);
    mode = atoi(argv[4]);
    iso = atoi(argv[5]);
    prefix = argv[6];
    srand(time(NULL));
    
  
    if (!iso){ 
        for (i = 1; i < numgraphs; i++){
            sprintf(filename,"%s%04d",prefix, i );
            generate_graph (n, kreg, p, m, mode, filename );
         }
    }
   else {
       generate_iso(n, kreg, p, m, mode, numgraphs, prefix);
   }
   
    return 0;
}
예제 #5
0
 void init() {
   N = in->N;
   fill(std::begin(used), SIZE, false);
   cnt = 0;
   generate_graph();
 }
예제 #6
0
파일: Testing.c 프로젝트: hvidgaard/AADS
int main(int argc, char **argv)
{
	if(argc < 4) {
		printf("Usage\n");
		printf("    test random <heap> <vertices> [seed] [edgechance] [maxweight] [source]\n");
		printf("    test dkmax <heap> <vertices>\n");
		printf("    test dkmax2 <heap> <vertices>\n");
		printf("        Heaptypes:  bin, fib, pq\n");
		exit(1);
	}
	
	char *heap_name = malloc(10*sizeof(char));
	unsigned int (*dijkstra)(unsigned int num_vertices, unsigned int source, unsigned int * w, unsigned int ** edges, unsigned int *bops);
	if(strcmp(argv[2], "bin") == 0) {
		heap_name = "Binary";
		dijkstra = dijkstra_bin;
	} else if(strcmp(argv[2], "fib") == 0) {
		heap_name = "Fibonacci";
		dijkstra = dijkstra_fib;
	} else if(strcmp(argv[2], "pq") == 0) {
		heap_name = "Primitive";
		dijkstra = dijkstra_pq;
	} else {
		printf("Unknown heap type '%s'\n", argv[2]);
		exit(2);
	}
	
	unsigned int vertices = (unsigned int)strtoul(argv[3], NULL, 10);
	unsigned int source = 0;
	unsigned int *weights;
	unsigned int **edges = malloc(vertices * sizeof(unsigned int *));
	if(strcmp(argv[1], "random") == 0) {
		unsigned int seed;
		if(argc > 4 && argv[4]) {
			seed = (unsigned int)strtoul(argv[4], NULL, 10);
			srandom(seed);
		} else {
			srandom(time(NULL));
			seed = random()%99999999;
		}
		
		unsigned int edge_chance = 15;
		if(argc > 5)
			edge_chance = (unsigned int)strtoul(argv[5], NULL, 10);
		
		unsigned int max_weight = 20;
		if(argc > 6)
			max_weight = (unsigned int)strtoul(argv[6], NULL, 10);
		
		source = random()%vertices;
		if(argc > 7)
			source = (unsigned int)strtoul(argv[7], NULL, 10);
		
		weights = generate_graph(vertices, edge_chance, max_weight, seed);
		
		printf("Reticulating splines.\n");
		unsigned int *t_edges = malloc(vertices * sizeof(unsigned int));
		int i, j;
		for (i = 0; i < vertices; i++) {
			unsigned int count = 0;
			for (j = 0; j < vertices; j++)
				if (weights[(i * vertices) + j])
					t_edges[++count] = j;
			
			edges[i] = malloc((count+1) * sizeof(unsigned int));
			edges[i][0] = count;
			for (j = 1; j <= count; j++)
				edges[i][j] = t_edges[j];
		}
		free(t_edges);
	} else if(strcmp(argv[1], "dkmax") == 0) {
		weights = generate_decrease_key_max(vertices);
		
		printf("Reticulating splines.\n");
		unsigned int *t_edges = malloc(vertices * sizeof(unsigned int));
		int i, j;
		for (i = 0; i < vertices; i++) {
			unsigned int count = 0;
			for (j = 0; j < vertices; j++)
				if (weights[(i * vertices) + j])
					t_edges[++count] = j;

			edges[i] = malloc((count+1) * sizeof(unsigned int));
			edges[i][0] = count;
			for (j = 1; j <= count; j++)
				edges[i][j] = t_edges[j];
		}
		//free(t_edges);
	} else if (strcmp(argv[1], "dkmax2") == 0){
		weights = generate_decrease_key_max2(vertices);

		printf("Reticulating splines.\n");
		unsigned int *t_edges = malloc(vertices * sizeof(unsigned int));
		edges = malloc(vertices * sizeof(unsigned int *));
		int i, j;
		for (i = 0; i < vertices; i++) {
			unsigned int count = 0;
			for (j = 0; j < vertices; j++){
				if (weights[(i * vertices) + j])
					t_edges[++count] = j;
			}

			edges[i] = malloc((count+1) * sizeof(unsigned int));
			edges[i][0] = count;
			for (j = 1; j <= count; j++)
				edges[i][j] = t_edges[j];
		}
		//free(t_edges);
	}
	else {
		printf("Unknown graph algorithm '%s'\n", argv[1]);
		exit(3);
	}
	
	clock_t start;
	clock_t end;
	unsigned int decrease_key_calls;
	printf("Calculating distances.\n");
	printf("    Heap: %10s   Source:         %8d\n", heap_name, source);
	start = clock();
	decrease_key_calls = dijkstra(vertices, source, weights, edges, NULL);
	end = clock();
	double running_time = (double) (end-start) / (double) CLOCKS_PER_SEC;
	printf("    Time: %10gs  dec. key calls: %8d\n", running_time, decrease_key_calls);
	log_results(heap_name, argv[1], vertices, decrease_key_calls, running_time);
}