⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 solve.c

📁 利用空间表示的rcc8模型进行空间推理
💻 C
📖 第 1 页 / 共 3 页
字号:
    fprintf(file,"  Nodes v.: %7.1f\t\t%7.1f %7.1f %7.1f %7.1f %7.1f\n",	   avg, med, seventy, ninety, ninetynine, hundred);  avg = 0.0;  for (i = 0; i < trial; i++)    avg += (float)(tmaxdepth[i]);  avg = avg/((float)trial);  qsort(tmaxdepth,trial,sizeof(long int),&int_compare);    if (trial == 1) {    med = (float)tmaxdepth[0];    seventy = (float)tmaxdepth[0];    ninety = (float)tmaxdepth[0];    ninetynine = (float)tmaxdepth[0];    hundred = (float)tmaxdepth[0];  } else {    med = ((float)(tmaxdepth[(trial/2)-1]+tmaxdepth[trial/2]))/2.0;    seventy = ((float)(tmaxdepth[((trial*7)/10)-1]+		       tmaxdepth[((trial*7)/10)]))/2.0;    ninety = ((float)(tmaxdepth[((trial*9)/10)-1]+		       tmaxdepth[((trial*9)/10)]))/2.0;    ninetynine = ((float)(tmaxdepth[((trial*99)/100)-1]+		       tmaxdepth[((trial*99)/100)]))/2.0;    hundred = (float) tmaxdepth[trial-1];  }  if (brief)    fprintf(file," %6.5f %6.5f %6.5f %6.5f %6.5f %6.5f (md)\n",	   avg, med, seventy, ninety, ninetynine, hundred);  else    fprintf(file,"  Depth:    %7.1f\t\t%7.1f %7.1f %7.1f %7.1f %7.1f\n",	   avg, med, seventy, ninety, ninetynine, hundred);   init_statistics();}void copysplitfile(int newsplit){  int i,j;  if(newsplit==1) {    for (i=0;i<MAXSET;i++)       for (j=0; j<9; j++) {	splitinfo[i][j] = horninfo[i][j];	}      }  if(newsplit==2) {    for (i=0;i<MAXSET;i++)       for (j=0; j<9; j++) {	splitinfo[i][j] = closebaseinfo[i][j];	}      }  if(newsplit==3) {    for (i=0;i<MAXSET;i++)       for (j=0; j<9; j++) {	splitinfo[i][j] = c8info[i][j];	}      } if(newsplit==4) {    for (i=0;i<MAXSET;i++)       for (j=0; j<9; j++) {	splitinfo[i][j] = q8info[i][j];	}      } if(newsplit==5) {    for (i=0;i<MAXSET;i++)       for (j=0; j<9; j++) {	splitinfo[i][j] = intersectinfo[i][j];	}      }}void readsplitfile(char *s){  int i,j,inp;  if ((splitfile = fopen(s,"r")) == NULL) {    fprintf(stderr, "***Relation-cover file '%s' not found\n",s);    exit(-1);  }  fflush(stderr);  for (i=0;i<MAXSET;i++)     for (j=0; j<9; j++) {      if (fscanf(splitfile,"%d",&inp) != 1) {	fprintf(stderr, "***Format error in relation-cover file '%s'\n",s);	exit(-1);      } else {	splitinfo[i][j] = inp;      }    }  if ((fscanf(splitfile,"%d",&inp) == 1) || (!feof(splitfile))) {	fprintf(stderr, "***No eof in relation-cover file '%s'\n",s);      	exit(-1);      }}void standardsplitfile(void){  int i,j,inp;  if ((splitfile = fopen("hornsplit","r")) == NULL) {    fprintf(stderr, "****Relation-cover file 'hornsplit' not found\n");    exit(-1);  }  fflush(stderr);  for (i=0;i<MAXSET;i++)     for (j=0; j<9; j++) {      if (fscanf(splitfile,"%d",&inp) != 1) {	fprintf(stderr, "****Format error in relation-cover file 'hornsplit'\n");	exit(-1);      } else {	horninfo[i][j] = inp;      }    }  if ((fscanf(splitfile,"%d",&inp) == 1) || (!feof(splitfile))) {	fprintf(stderr, "****No eof in relation-cover file 'hornsplit'\n");      	exit(-1);      }  fclose(splitfile); if ((splitfile = fopen("c8split","r")) == NULL) {    fprintf(stderr, "****Relation-cover file 'c8split' not found\n");    exit(-1);  }  fflush(stderr);  for (i=0;i<MAXSET;i++)     for (j=0; j<9; j++) {      if (fscanf(splitfile,"%d",&inp) != 1) {	fprintf(stderr, "****Format error in relation-cover file 'c8split'\n");	exit(-1);      } else {	c8info[i][j] = inp;      }    }  if ((fscanf(splitfile,"%d",&inp) == 1) || (!feof(splitfile))) {	fprintf(stderr, "****No eof in relation-cover file 'c8split'\n");      	exit(-1);      }  fclose(splitfile); if ((splitfile = fopen("q8split","r")) == NULL) {    fprintf(stderr, "****Relation-cover file 'q8split' not found\n");    exit(-1);  }  fflush(stderr);  for (i=0;i<MAXSET;i++)     for (j=0; j<9; j++) {      if (fscanf(splitfile,"%d",&inp) != 1) {	fprintf(stderr, "****Format error in relation-cover file 'q8split'\n");	exit(-1);      } else {	q8info[i][j] = inp;      }    }  if ((fscanf(splitfile,"%d",&inp) == 1) || (!feof(splitfile))) {	fprintf(stderr, "****No eof in relation-cover file 'q8split'\n");      	exit(-1);      }  fclose(splitfile);  if ((splitfile = fopen("closebasesplit","r")) == NULL) {    fprintf(stderr, "****Relation-cover file 'closebasesplit' not found\n");    exit(-1);  }  fflush(stderr);  for (i=0;i<MAXSET;i++)     for (j=0; j<9; j++) {      if (fscanf(splitfile,"%d",&inp) != 1) {	fprintf(stderr, "****Format error in relation-cover file 'closebasesplit'\n");	exit(-1);      } else {	closebaseinfo[i][j] = inp;      }    }  if ((fscanf(splitfile,"%d",&inp) == 1) || (!feof(splitfile))) {	fprintf(stderr, "****No eof in relation-cover file 'closebasesplit'\n");      	exit(-1);      }  fclose(splitfile); if ((splitfile = fopen("intersplit","r")) == NULL) {    fprintf(stderr, "****Relation-cover file 'intersectsplit' not found\n");    exit(-1);  }  fflush(stderr);  for (i=0;i<MAXSET;i++)     for (j=0; j<9; j++) {      if (fscanf(splitfile,"%d",&inp) != 1) {	fprintf(stderr, "****Format error in relation-cover file 'intersplit'\n");	exit(-1);      } else {	intersectinfo[i][j] = inp;      }    }  if ((fscanf(splitfile,"%d",&inp) == 1) || (!feof(splitfile))) {	fprintf(stderr, "****No eof in relation-cover file 'intersplit'\n");      	exit(-1);      }  fclose(splitfile);}void getnextcsp(char csp[100]){  int d;  char line[256];  d = 1;  while ((d != 0) && (!feof(solveonlyfile))) {    fgets(line,255,solveonlyfile);    if (sscanf(line,"%s %d",csp,&d) != 2) d = 1;    if ((d == taggedwith) && (csp[strlen(csp)-1] == ':'))       csp[strlen(csp)-1] = '\0';    if (swdebug) fprintf(stderr,"SO: %s -> %s %d\n",line,csp,d);  }  if (feof(solveonlyfile)) csp[0] = '\0';}float readfloatarg(int *xarg, char **argv){  float result;    (*xarg)++;  if (sscanf(argv[*xarg],"%f",&result) != 1) usage();  return(result);}unsigned int readintarg(int *xsw, int *xarg, char **argv){  unsigned int result;  if (argv[*xarg][++(*xsw)] == '\0') {    (*xarg)++;    if (sscanf(argv[*xarg],"%d",&result) != 1) usage();  } else {    if (sscanf(&argv[*xarg][*xsw],"%d",&result) != 1) usage();  }  *xsw = strlen(argv[*xarg])-1;  return(result);}int heuristic(char *s, int i, int *oldsplit){  int error=0,newsplit=0;   /* printf("heuristic %c, old: %i\n",s[i],*oldsplit); */  switch (s[i])    {    case '1':       swfixed = 0;      swenvcons = 0;      swsplitinfo=1;           newsplit=1;      break;    case '2':       swfixed = 0;      swenvcons = 1;      swsplitinfo=1;           newsplit=1;      break;    case '3':       swfixed = 1;      swenvcons = 0;       swsplitinfo=1;          newsplit=1;       break;    case '4':       swfixed = 1;      swenvcons = 1;       swsplitinfo=1;           newsplit=1;      break;    case 'A':       swfixed = 0;      swenvcons = 0;      swsplitinfo=1;      newsplit=2;       break;    case 'B':       swfixed = 0;      swenvcons = 1;      swsplitinfo=1;      newsplit=2;      break;    case 'C':       swfixed = 1;      swenvcons = 0;      swsplitinfo=1;      newsplit=2;      break;    case 'D':       swfixed = 1;      swenvcons = 1;      swsplitinfo=1;      newsplit=2;      break;     case 'a':       swfixed = 0;      swenvcons = 0;      swsplitinfo=0;      newsplit=0;       break;    case 'b':       swfixed = 0;      swenvcons = 1;      swsplitinfo=0;      newsplit=0;      break;    case 'c':       swfixed = 1;      swenvcons = 0;      swsplitinfo=0;      newsplit=0;      break;    case 'd':       swfixed = 1;      swenvcons = 1;      swsplitinfo=0;      newsplit=0;      break;    case 's':       swfixed = 0;      swenvcons = 0;      swsplitinfo=1;           newsplit=3;      break;    case 't':       swfixed = 0;      swenvcons = 1;      swsplitinfo=1;           newsplit=3;      break;    case 'u':       swfixed = 1;      swenvcons = 0;       swsplitinfo=1;          newsplit=3;       break;    case 'v':       swfixed = 1;      swenvcons = 1;       swsplitinfo=1;           newsplit=3;      break;    case 'S':       swfixed = 0;      swenvcons = 0;      swsplitinfo=1;           newsplit=4;      break;    case 'T':       swfixed = 0;      swenvcons = 1;      swsplitinfo=1;           newsplit=4;      break;    case 'U':       swfixed = 1;      swenvcons = 0;       swsplitinfo=1;          newsplit=4;       break;    case 'V':       swfixed = 1;      swenvcons = 1;       swsplitinfo=1;           newsplit=4;      break;    case 'i':       swfixed = 0;      swenvcons = 0;      swsplitinfo=1;           newsplit=5;      break;    case 'j':       swfixed = 0;      swenvcons = 1;      swsplitinfo=1;           newsplit=5;      break;    case 'k':       swfixed = 1;      swenvcons = 0;       swsplitinfo=1;          newsplit=5;       break;    case 'l':       swfixed = 1;      swenvcons = 1;       swsplitinfo=1;           newsplit=5;      break;    default: error=1;    }  /* printf("swfixed: %i,swenvcons %i, splitfilename: %s, error: %i, i: %i, old: %i, new: %i\n",swfixed,swenvcons,splitfilename,error,i,*oldsplit,newsplit); */  if ((!error) && (newsplit!=0) && (*oldsplit!=newsplit) ) {    copysplitfile(newsplit);    *oldsplit=newsplit;  }   /* printf("old: %i,  sfn: %s\n",*oldsplit,splitfilename);*/  return error;}void init_headers(){  int i;  char emptystring[] = "empty";  for(i=0;i<MAXHEADER;i++) {    headers[i].next=NULL;    strcpy(headers[i].name,emptystring);  }printf("init_headers done\n");}int add_headers(FILE *headerfile){  int number=0;  char line[100],head[100],size[100];  hp field,new;  char emptystring[] = "empty";  while (!feof(headerfile)) {    while (fgets(line,100,headerfile) && ((line[0] == '\n') || (line[0] == '\0')));     if (sscanf(line,"%s %s",size,head) !=2) {      fprintf(stderr,"\n*** Header line not found: '%s'\n",line);      exit(0);    }    field=&headers[atoi(size)];    if(strcmp(field->name,emptystring)==0) {      strcpy(field->name,head);       number++;      continue;    }        while((strcmp(field->name,head)!=0) && (field->next!=NULL)) {      field = field->next;    }    if(strcmp(field->name,head)==0) continue;    if(field->next==NULL) {      new = malloc(sizeof(hdr));      strcpy(new->name,head);      new->next=NULL;      field->next=new;      number++;      continue;    }    printf("something is wrong!!\n");  }  printf("add_headers done (%i)\n",number);  return number;}int delete_headers(FILE *headerfile){  int number=0;  char line[100],head[100],size[100];  hp field,save=NULL;  char emptystring[] = "empty";  while (!feof(headerfile)) {    while (fgets(line,100,headerfile) && ((line[0] == '\n') || (line[0] == '\0')));     if (sscanf(line,"%s %s",size,head) != 2) {      fprintf(stderr,"\n*** Header line not found: '%s'\n",line);      exit(0);    }    field=&headers[atoi(size)];    if(strcmp(field->name,emptystring)==0) {      continue;    }    if(strcmp(field->name,head)==0) {      if(field->next==NULL) {	strcpy(field->name,emptystring);	number++;	continue;      }      save=field->next;      strcpy(field->name,save->name);      field->next=save->next;      free(save);      continue;    }    while((strcmp(field->name,head)!=0) && (field->next!=NULL)) {      save=field;      field = field->next;    }    if(strcmp(field->name,head)==0) {      if(field->next==NULL) {	save->next=NULL;      }      else {	save->next=field->next;      }      number++;      free(field);      continue;    }  }  printf("delete_headers done (%i)\n",number);  return number;}int pop_header(int size, char *head) {    hp field,save=NULL;  char emptystring[] = "empty";  field=&headers[size];  if(strcmp(field->name,emptystring)==0) {    return 0;  }  if(strcmp(field->name,head)==0) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -