Example #1
0
void graph_draw_rectangle(cairo_t *cr, int x, int y, int width, int height, Color lineColor, Color areaColor)
{
	graph_set_color(cr, lineColor);
	graph_set_line_width(cr, 1);
	
	cairo_rectangle(cr, x, y, width, height);
	cairo_stroke_preserve(cr);

	graph_set_color(cr, areaColor);
	cairo_fill(cr);
}
Example #2
0
graph_t *graph_plant_path(index_t n, index_t idx)
{
    graph_t *g = graph_alloc(n);
    index_t last = -1;
    index_t t[128];
    index_t k = 0;
    for(index_t i = 0; i < n; i++) {
        if((idx >> i)&1) {
            if(last >= 0)
                graph_add_edge(g, last, i);
            last = i;
            t[k++] = i;
            graph_set_color(g, i, 1);
        } else {
            graph_set_color(g, i, 0);
        }
    }
Example #3
0
Graph *graph_parse(FILE *stream)
{
    int n, m, c, k;
    int i, j, d, l;
    Graph *g;

    skipws(stream);

    // param line
    if(fscanf(stream, "p %d %d %d %d\n", &n, &m, &c, &k) != 4) {
	// ERROR("invalid parameter line");
//	fprintf(stderr, "Terminating.\n");
	return NULL;
    }
    if(n < 1 || n > 1000 ||
       m < 1 || m > (n*(n-1))/2 ||
       c < 1 || c > n ||
       k < 2 || k > 30)
	ERROR("invalid input parameters (n = %d, m = %d, c = %d, k = %d)",
	      n, m, c, k);
        
    g = graph_alloc(n, m, c, k);
        
    // edges
    for(l = 0; l < m; l++) {
	skipws(stream);
	if(fscanf(stream, "e %d %d\n", &i, &j) != 2)
	    ERROR("invalid edge line");
	if(i < 1 || i > n || i == j || j < 1 || j > n)
	    ERROR("invalid edge (i = %d, j = %d)", i, j);
	graph_add_edge(g, i-1, j-1);
    }
    
    // length backup for reduced graph addressing 
    for(l = 0; l < n; l++) {
	g->fullnlens[l] = g->neighbors[l].len;
    }

    // vertex colors
    for(l = 0; l < n; l++) {
	skipws(stream);
	if(fscanf(stream, "c %d %d\n", &i, &d) != 2)
	    ERROR("invalid color line");
	if(i < 1 || i > n || d < 1 || d > c)
	    ERROR("invalid color (i = %d, d = %d)", i, d);
	graph_set_color(g, i-1, d-1);
    }
        
    // motif
    skipws(stream);
    for(l = 0; l < k; l++) {
	if(l == 0) {
	    if(fscanf(stream, "f %d", &d) != 1)
		ERROR("invalid motif line");
	} else {
	    if(fscanf(stream, " %d", &d) != 1)
		ERROR("invalid motif line");
	}
	if(d < 1 || d > c)
	    ERROR("invalid motif component (d = %d)\n", d);

	g->shades[d-1]++;
    }

    return g;
}