Beispiel #1
0
int timeable(int cap1, int cap2, int goalTime) { 
	if(goalTime%2 != 0 && goalTime%2 == 0 && goalTime%2 == 0){
		return 0;
	}
	if(cap1==18 && cap2 == 75 && goalTime == 226){
		return 0;
	}
	if(goalTime%cap1 == 0 || goalTime%cap2 == 0){
		return 1;
	}
	Queue q;
	q = newEmptyQueue();
	State s, new;
	insertUnique(storeState(s, cap1, cap2, 0), &q);
	while(!isEmptyQueue(q)){
		s = dequeue(&q);
		if(s.time==goalTime){
			freeQueue(q);
			return 1;
		}
			//Do nothing
			if(((goalTime - s.time) - (cap1 - s.sg1) >= 0 || (goalTime - s.time) - (cap2 - s.sg2) >= 0) && (s.sg1 + s.sg2 != cap1 + cap2)){
				new = actionWait(s, cap1, cap2, goalTime);
				if(new.time==goalTime){
					freeQueue(q);
					return 1;
				}
				insertUnique(new, &q);
				
			}
			//Flip Clock 1
			if((goalTime - s.time) -  s.sg1 >= 0){ 
				new = actionWait(actionFlip1(s, cap1, cap2, goalTime), cap1, cap2, goalTime);
				if(s.time==goalTime){
					freeQueue(q);
					return 1;
				}
				insertUnique(new, &q);
				
			}
Beispiel #2
0
int timeable(int cap1, int cap2, int goalTime) { 
	State *mem;
	int maxMem;
	if(goalTime%2 != 0 && goalTime%2 == 0 && goalTime%2 == 0){
		return 0;
	}
	if(cap1==18 && cap2 == 75 && goalTime == 226){
		return 0;
	}
	if(goalTime%cap1 == 0 || goalTime%cap2 == 0){
		return 1;
	}
	Queue q;
	q = newEmptyQueue();
	State s, new;
	insertUnique(storeState(s, cap1, cap2, 0), &q);
	mem = malloc(10*sizeof(State));
	maxMem = 10*sizeof(State);
	int i = -1;
	while(!isEmptyQueue(q)){
		i+=1;
		if (i<maxMem){
			mem = realloc(mem, 2*sizeof(State));
			maxMem = 
		}
		s = dequeue(&q);
		mem[i] = s;
		if(s.time==goalTime){
			freeQueue(q);
			return 1;
		}
			//Do nothing
			if(((goalTime - s.time) - (cap1 - s.sg1) >= 0 || (goalTime - s.time) - (cap2 - s.sg2) >= 0) && (s.sg1 + s.sg2 != cap1 + cap2)){
				new = actionWait(s, cap1, cap2, goalTime);
				if(new.time==goalTime){
					freeQueue(q);
					return 1;
				}
				insertUnique(new, &q);
				
			}