예제 #1
0
파일: fdpinit.c 프로젝트: ekoontz/graphviz
void fdp_init_node_edge(graph_t * g)
{
    attrsym_t *E_len;
    node_t *n;
    edge_t *e;
    int nn = agnnodes(g);
    int i;
    ndata* alg = N_NEW(nn, ndata);

    processClusterEdges(g);

    GD_neato_nlist(g) = N_NEW(nn + 1, node_t *);

    for (i = 0, n = agfstnode(g); n; n = agnxtnode(g, n)) {
	neato_init_node (n);
	ND_alg(n) = alg + i;
	GD_neato_nlist(g)[i] = n;
	ND_id(n) = i++;
    }

    E_len = agfindattr(g->proto->e, "len");
    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {
	for (e = agfstout(g, n); e; e = agnxtout(g, e)) {
	    init_edge(e, E_len);
	}
    }
    initialPositions(g);

}
예제 #2
0
Graph init_graph()
{
    Graph *g = (Graph *)malloc(sizeof(Graph));
    g->vexnum = 0;
    g->edgnum = 0;
    init_vertex(g);
    init_edge(g);
    return *g;
}
예제 #3
0
파일: commands.c 프로젝트: shellygr/SwProj
int add_edge(int first_id, int second_id, double weight, network *net) {
	vertex *src_vrtx = get_vertex(first_id, net);
	vertex *dest_vrtx = get_vertex(second_id, net);
	edge *e = NULL;

	init_edge(&e, first_id, second_id, weight);

	if ((add_edge_to_vertex(&src_vrtx, &dest_vrtx, e) == 2))
		return 2;

	return 0;
}
예제 #4
0
파일: rad_main.C 프로젝트: imaxxs/Graphite
void init_global(long process_id)
{
    /* Clear BSP root pointer */
    global->index = 1;  /* ****** */
    global->bsp_root = 0 ;
    LOCKINIT(global->index_lock);
    LOCKINIT(global->bsp_tree_lock);

    /* Initialize radiosity statistics variables */
    LOCKINIT(global->avg_radiosity_lock);
    global->converged = 0 ;
    global->prev_total_energy.r = 0.0 ;
    global->prev_total_energy.g = 0.0 ;
    global->prev_total_energy.b = 0.0 ;
    global->total_energy.r = 1.0 ;
    global->total_energy.g = 1.0 ;
    global->total_energy.b = 1.0 ;
    global->total_patch_area = 1.0 ;
    global->iteration_count = -1 ;     /* init_ray_task() increments to 0 */

    /* Initialize the cost sum */
    LOCKINIT(global->cost_sum_lock);
    global->cost_sum = 0 ;
    global->cost_estimate_sum = 0 ;

    /* Initialize the barrier */
    BARINIT(global->barrier, n_processors);
    LOCKINIT(global->pbar_lock);
    global->pbar_count = 0 ;

    /* Initialize task counter */
    global->task_counter = 0 ;
    LOCKINIT(global->task_counter_lock);

    /* Initialize task queue */
    init_taskq(process_id) ;

    /* Initialize Patch, Element, Interaction free lists */
    init_patchlist(process_id) ;
    init_elemlist(process_id) ;
    init_interactionlist(process_id) ;
    init_elemvertex(process_id) ;
    init_edge(process_id) ;

    /* Initialize statistical info */
    init_stat_info(process_id) ;

}
예제 #5
0
int main(int argc,char* argv[])
{
        if(argc!=4)
        { 
            printf("Wrong Arguments!");
            return 1;
        }
        
	FILE * fhand=fopen ( argv[1], "r" );
        if(fhand==0)
        {
            printf("File Open Error.");
            return 1;
        }
	int i,len; fscanf(fhand,"%d",&len);
	Matrix edgeMat; int edgeCount= readMatrix(&edgeMat,fhand,len); 
        fclose(fhand);
	
        if(strcmp(argv[2],"-p")==0)
        {
            int *parent= (int*) malloc(len*sizeof(int)); //holds MST tree as parent array
            int *intree= (int*) malloc(len*sizeof(int));//holds edges in MST
            int *near= (int*) malloc(len*sizeof(int));  //holds distance to MST 
            if(parent==0||intree==0||near==0)
            {
                printf("Memory Allocation Error!"); 
                exit(1);
            }
            fhand=fopen ( argv[3], "w" );
            if(fhand==0){
                printf("File Write Protected or In Use!");
                return 1;
            }
            prim(parent,near,intree,&edgeMat);
            int sum=0;
            Matrix result; createMatrix(&result,len);
            for(i=1;i<len;i++)
            {
                    if(parent[i]!=-1)
                    {
                      result.data[i][parent[i]]=1;result.data[parent[i]][i]=1;
                      sum+=edgeMat.data[i][parent[i]];
                    }
            }  
            fprintf(fhand,"%d\n%d\n",len,sum);            
            writeMatrix(&result,fhand);
            clearMatrix(&result);
            fclose(fhand);
        }
        else if(strcmp(argv[2],"-k")==0)
        {
            //Edge_heap eheap; init_heap(&eheap,len*len/2); 
            edge *ex= (edge*) malloc(edgeCount*sizeof(edge));
            if(ex==0){ printf("Memory Allocation Error!"); exit(1);}
            int n,m,k=0;  
            for(n=0;n<len-1;n++)
            {		//just travels upper triangular of matrix
                    for (m=n+1;m<len;m++)
                    {    
                            if(edgeMat.data[n][m]!=0)
                            {
                                    init_edge(&ex[k],n,m,&edgeMat); 
                                    //insert(&edgeMat,&eheap,&ex[k]);
                                    if(++k==edgeCount) break;
                            }
                    }
                    if(k==edgeCount) break;
            }
            clearMatrix(&edgeMat);
            Matrix result; createMatrix(&result,len); 
            DisjSets dset; init_DisjSets(&dset,len);
        
            fhand=fopen ( argv[3], "w" );
            if(fhand==0){
                printf("File Write Protected or In Use!");
                return 1;
            }
            fprintf(fhand,"%d\n%d\n",len,kruskal(&result,&dset,ex,edgeCount));           
            writeMatrix(&result,fhand);
            clearMatrix(&result);
            fclose(fhand);
        }
        else
        {
            printf("Wrong Arguments!");
            return 1;
        }
    return 0;
}
예제 #6
0
void gp_fill_polygon_raw(gp_pixmap *pixmap, unsigned int nvert,
                         const gp_coord *xy, gp_pixel pixel)
{
	unsigned int i;
	struct edge *e;

	if (nvert < 3)
		return;		/* not enough vertices */

	gp_point const *vert = (gp_point const *) xy;

	/* find first and last scanline */
	gp_coord ymin = INT_MAX, ymax = -INT_MAX;
	for (i = 0; i < nvert; i++) {
		ymax = GP_MAX(ymax, vert[i].y);
		ymin = GP_MIN(ymin, vert[i].y);
	}

	/* build a list of edges */
	struct edge edges[nvert];
	unsigned int nedges = 0;		/* number of edges in list */
	for (i = 0; i < nvert; i++) {

		/*
		 * next vertex index (wraps to 0 at end to connect
		 * the last vertex with the first one)
		 */
		unsigned int nexti = (i+1) % nvert;

		/* add new edge record */
		e = edges + nedges++;
		init_edge(e, vert[i], vert[nexti]);
	}

	if (nedges < 2)
		return;		/* not really a polygon */

	/* initially sort edges by Y, then X */
	qsort(edges, nedges, sizeof(struct edge),
	      (gp_sort_callback) edges_compare_initial);

	/*
	 * for each scanline, compute intersections with all edges
	 * and draw a horizontal line segment between the intersections.
	 */
	float inter[nedges];
	unsigned int ninter;
	int y;
	for (y = ymin; y <= ymax; y++) {

		/* mark edges we have just reached as active */
		for (i = 0; i < nedges; i++) {
			e = edges + i;
			if (e->state == EDGE_READY && (y == e->y)) {
				e->state = EDGE_ACTIVE;
			}
		}
		qsort(edges, nedges, sizeof(struct edge),
		      (gp_sort_callback) edges_compare_runtime);

		/* record intersections with active edges */
		ninter = 0;
		for (i = 0; i < nedges; i++) {
			e = edges + i;
			if (e->state == EDGE_ACTIVE) {
				inter[ninter++] = e->x;
			}
		}

		/* draw each even range between intersections */
		for (i = 0; i < ninter; i += 2) {
			float start = inter[i];

			/* odd number of intersections - skip last */
			if (i+1 == ninter)
				break;

			float end = inter[i+1];
			gp_hline_raw(pixmap, start, end, y, pixel);
		}

		/* update active edges for next step */
		for (i = 0; i < nedges; i++) {
			e = edges + i;
			if (e->state == EDGE_ACTIVE) {
				if (e->dy == 0) {
					e->state = EDGE_FINISHED;
				} else {
					e->x += e->dxy;
					e->dy--;
				}
			}
		}
	}

	/* finishing touch: draw all horizontal edges that were skipped
	 * in the main loop
	 */
	for (i = 0; i < nedges; i++) {
		e = edges + i;
		if (e->state == EDGE_HORIZONTAL) {
			gp_hline_raw(pixmap, e->x, e->x + e->dxy, e->y,
				     pixel);
		}
	}
}