コード例 #1
0
ファイル: ugraph.c プロジェクト: germuth/Kekule
int main(int argc, char *argv[]) {
  int i, rank;
  Arraylist r;
  assert(argc > 1);
  rank = atoi(argv[1]);
  r = allGraphs(rank);
  if (rank % 2 == 1){
    printf("Graphs: %d.\n", r->size);
    printAsGraphList(rank, r);
  } else {
    Arraylist r0, r1;
    r0 = newArraylist(5);
    r1 = newArraylist(5);
    for (i = 0 ; i < r->size ; i++) {
      if (matched(rank, r->it[i])) putItem(r->it[i], r0);
      else putItem(r->it[i], r1);
    }
    printf("Matched graphs: %d.\n", r0->size);
    printAsGraphList(rank, r0);
    printf("Unmatched graphs: %d.\n", r1->size);
    printAsGraphList(rank, r1);
    freeArraylist(r0);
    freeArraylist(r1);
  }
  freeArraylist(r);
  freePerm();
#if 0
  reportCnt();
  reportACnt();
  reportGCnt();
#endif
  return 0;
}
コード例 #2
0
ファイル: permutations.c プロジェクト: germuth/Kekule
/* Pre: perm is initialized, hist[0..rank-1] is descending.
 * Create the list of permutations (as powers of 2)
 * that preserve hist[0..rank-1]  */
Arraylist specPerm(int rank, int* hist) {
	int i, j, k, m, x;
	Intstack prim = newIntstack(rank, NULL) ;
	Arraylist result = newArraylist(1) ;
	Arraylist locperm;
	prim->size = rank;
	for (i = 0, x = 1; i < rank; i++, x <<= 1) {
		prim->it[i] = x;
	}
	putItem(prim, result) ;
	i = 0;
	while (i + 1 < rank) {
		j = i+1;
		while (j < rank && hist[i] == hist[j])
			j++;
		if (i+1 < j) {
			x = result->size;
			locperm = getPerm(j-i) ;
			for (k = 0; k < locperm->size - 1; k++)
				for (m = 0; m < x; m++)
					putItem(applyPerm(i, result->it[m], locperm->it[k]), result) ;
		}
		i = j;
	}
	return result;
}
コード例 #3
0
ファイル: permutations.c プロジェクト: germuth/Kekule
Arraylist getPerm(int rank) {
	int i, j, k;
	Intstack y, z;
	if (!permInit)
		initPerm() ;
	if (perm[rank] != NULL)
		return perm[rank];
	if (perm[rank-1] == NULL)
		getPerm(rank-1) ;
	perm[rank] = newArraylist(rank * perm[rank-1]->size) ;
	for (i = 0; i < perm[rank-1]->size; i++) {
		y = perm[rank-1]->it[i];
		for (j = 0; j < rank; j++) {
			z = newIntstack(rank, NULL);
			for (k = 0; k < j; k++)
				z->it[k] = y->it[k];
			z->it[j] = rank - 1;
			for (k = j; k < y->size; k++)
				z->it[k+1] = y->it[k];
			z->size = rank;
			putItem(z, perm[rank]) ;
		}
	}
	return perm[rank];
}
コード例 #4
0
ファイル: permutations.c プロジェクト: germuth/Kekule
void initPerm() {
	int i;
	Intstack p0, p1;
	if (permInit)
		return;
	permInit = 1;
	for (i = 0; i < RANKLIM; i++)
		perm[i] = NULL;
	perm[0] = newArraylist(1) ;
	perm[1] = newArraylist(1) ;
	p0 = newIntstack(0, NULL) ;
	putItem(p0, perm[0]) ;
	p1 = newIntstack(1, NULL) ;
	putint(0, p1) ;
	putItem(p1, perm[1]) ;
}
コード例 #5
0
ファイル: classGraph.c プロジェクト: germuth/Kekule
Arraylist allGraphs(int rank) {
  Arraylist result = newArraylist(rank);
  Intstack cand = newIntstack(0, NULL), 
    fg = fullgraph(rank);
  unsigned long int x, y, ulim = 1 << fg->size;
  int i;
  setRank(rank);
  for (x = 0L; x < ulim; x++) {
    cand->size = 0;
    y = x;
    i = 0;
    while (y > 0) {
      if (y % 2 == 1) putint(fg->it[i], cand);
      y /= 2;
      i++;
    }
    if (portHistDescending(cand)) {
      putItem((void*) newIntstack(0, cand), result);
    } 
  }
  freestack(cand);
  freestack(fg);
  sortAndWeedForGraphs(rank, result);
  return result;
}
コード例 #6
0
ファイル: arraylistTest.c プロジェクト: Bryanx/exercises
int main() {
    ARRAYLIST* list = newArraylist();
    addElement(list, "Bryan",0);
    addElement(list, "Jarne",1);
    addElement(list, "Henk",2);
    addElement(list, "Kees",3);
    addElement(list, "Boudewijn",4);
    printList(list);
    removeElement(list, 0);
    printList(list);
    return 0;
}
コード例 #7
0
ファイル: permutations.c プロジェクト: germuth/Kekule
Arraylist rawPermVariants(int rank, Intstack cell) {
	int i, h[RANKLIM];
	Arraylist perms;
	Arraylist result;
	portHisto(cell, h) ;
	perms = specPerm(rank, h) ;
	result = newArraylist(perms->size) ;
	for (i = 0; i < perms->size; i++) {
		putItem(permuteCell(cell, perms->it[i]), result) ;
		freestack(perms->it[i]) ;
	}
	freeArraylist(perms) ;
	return result;
}