#include #include #define MaxNode 1048576 #define MaxBug 20 #define MaxPatch 100 #define oo 1000000000 FILE * input; int pos[MaxPatch], neg[MaxPatch], fixed[MaxPatch], intro[MaxPatch], time[MaxPatch]; int pNum, bNum; int queue[MaxNode], val[MaxNode], last; int found[MaxNode]; int apply(int p, int s) { int s1; s1 = (s & (~fixed[p])) | intro[p]; /* printf("applying %d to %d yields %d\n", p, s, s1); */ return s1; } int applicable(int p, int s) { int flag; flag = (((~s) & pos[p])==0) && ( (s & neg[p])==0); /* printf("%d %s applicable to %d\n", p, flag?"":"Not ", s); */ return flag; } int search(int start) { int p, best, best_at; int pVal[MaxPatch], next[MaxPatch]; last = 1; queue[0] = start; val[0] = 0; for (p=0; p