Ejemplo n.º 1
0
static void
test_set(void) {
    char *keys1[] = {"a", "b", "r", "a", "c", "a", "d", "a", "b", "r", "a"};
    char *keys2[] = {"a", "l", "a", "c", "a", "z", "a", "m"};
    SetObject *a = set_new();
    SetObject *b = set_new();
    set_addfrom(a, (void**)keys1, 11);
    set_addfrom(b, (void**)keys2, 8);
    set_print(a); // { 'c', 'd', 'r', 'a', 'b', }
    set_print(b); // { 'c', 'l', 'm', 'a', 'z', }
    set_print(set_rsub(a, b)); //{ 'd', 'b', 'r', }
    set_print(set_ror(a, b)); //{ 'a', 'b', 'c', 'd', 'l', 'm', 'r', 'z', }
    set_print(set_rand(a, b)); //{ 'c', 'a', }
    set_print(set_rxor(a, b)); //{ 'b', 'd', 'l', 'm', 'r', 'z', }
    set_ior(a, b);
    set_print(a);
    set_isub(a, b);
    set_print(a);
    set_ixor(a, b);
    set_print(a);
    set_iand(a, b);
    set_print(a);
    set_free(a);
    set_free(b);
    char *keys3[] = {"a", "b"};
    char *keys4[] = {"a", "b", "d", "c", "e", "f", "g", "h"};
    SetObject *c = set_new();
    SetObject *d = set_new();
    set_addfrom(c, (void**)keys3, 2);
    set_addfrom(d, (void**)keys4, 8);
    set_print(set_xor(c, d));
    set_print(set_and(c, d));
    set_print(set_sub(c, d));
}
Ejemplo n.º 2
0
void set_sub(int p, int num) {
	int i;
	sub[p] = num;
	for (i = 0; i < n; i++) {
		if (adj[p][i] && !sub[i])
			set_sub(i, num); 
	}
}
Ejemplo n.º 3
0
void Topsort(AdjList *G,int *indegree){
    
    int i,j,k;
    get_in_degree(G,indegree);
    for(i = 1;i <= G->vexnum;i++){
        k = get_zero(G,indegree);
        if(k != -1){
            printf("%d \n",k);
            set_sub(G,indegree,k);
        }
    }


}
Ejemplo n.º 4
0
main () {
    FILE *fin  = fopen ("cowtour.in", "r");
    fout = fopen ("cowtour.out", "w");
    int i, j, r, s, d;

    fscanf (fin, "%d", &n);
    for (i = 0; i < n; i++)
    	fscanf (fin, "%d %d", &x[i], &y[i]);
    for (i = 0; i < n; i++)
    	for (j = 0; j < n; j++)
    		fscanf (fin, "%1d", &adj[i][j]);
    for (i = 0; i < n; i++)
        adj[i][i] = 1;

    /* find subgraph */
    memset(sub, 0, sizeof(sub));
    int subnum = 0;
    for (i = 0; i < n; i++) {
    	if (!sub[i])
    		set_sub(i, ++subnum);
    }

    /* shortest path */
    for (s = 1; s <= subnum; s++)
    	sp(s);


    double dia, min_dia = INFIN;
    /* connect subgraph 1 with 2, 3, ... , subnum */
    for (r = 1; r < subnum; r++) {
        for (s = r+1; s <= subnum; s++) {
        	int a, b;
        	double d, len = INFIN;
        	for (i = 0; i < n; i++) {
        		if (sub[i] == r) {
        			for (j = 0; j < n; j++) {
        				if (sub[j] == s) {
        					d = distant(x[i], y[i], x[j], y[j]);
        					if (len > max[i] + max[j] + d) {
        						a = i;
        						b = j;
        						len = max[i] + max[j] + d;
        					}
        				}
        			}
        		}
        	}  

            adj[a][b] = adj[b][a] = 1;
            dis[a][b] = dis[b][a] = distant(x[a], y[a], x[b], y[b]);
            for (i = 0; i < n; i++) {
                if (sub[i] == r) {
                    for (j = 0; j < n; j++) {
                        if (sub[j] == s)
                            dis[i][j] = dis[j][i] = dis[i][a] + dis[a][b] + dis[b][j];
                    }
                }
            }

            dia = 0;
            for (i = 0; i < n; i++) {
                if (sub[i] == r || sub[i] == s) {
                    for (j = 0; j < n; j++) {
                        if (sub[j] == r || sub[j] == s) {
                            if (dia < dis[i][j])
                                dia = dis[i][j];
                        }
                    }
                }
            }
            if (min_dia > dia)
                min_dia = dia;
        }
    }

    fprintf(fout, "%.6f\n", min_dia);

    exit (0);
}