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

📄 gencsp.c

📁 利用空间表示的rcc8模型进行空间推理
💻 C
📖 第 1 页 / 共 2 页
字号:
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);      }}unsigned int readintarg(int *xarg, char **argv){  unsigned int result;  (*xarg)++;  if (sscanf(argv[*xarg],"%d",&result) != 1) usage();  return(result);}float readfloatarg(int *xarg, char **argv){  float result;    (*xarg)++;  if (sscanf(argv[*xarg],"%f",&result) != 1) usage();  return(result);}int main(int argc, char **argv){  int xarg;  register int i,nd;  register float cd,lbs,dg;  FILE *algfile;  int maxsize=4;  char prefix[100];  swoutfile=0;  xarg = 1;  outfile=stdout;   /* default is stdout */  while (xarg < argc) {    if (argv[xarg][0] != '-') usage();    switch(argv[xarg][1]) {    case 'c':      if(xarg+1 >= argc) usage();      swminconsdensity = readfloatarg(&xarg,argv);      if((xarg+2 < argc) && (argv[xarg+1][0]!='-')){	swmaxconsdensity = readfloatarg(&xarg,argv);	swstepconsdensity = readfloatarg(&xarg,argv);      }      else{	swmaxconsdensity = swminconsdensity;	swstepconsdensity = 1.0;      }      if (swminconsdensity != 0.0) swmindegree = 0.0;      break;   case 'C':      if(xarg+1 >= argc) usage();      swminconsdensityout = readfloatarg(&xarg,argv);      if((xarg+2 < argc) && (argv[xarg+1][0]!='-')){	swmaxconsdensityout = readfloatarg(&xarg,argv);	swstepconsdensityout = readfloatarg(&xarg,argv);      }      else{	swmaxconsdensityout = swminconsdensityout;	swstepconsdensityout = 1.0;      }      if (swminconsdensityout != 0.0) swmindegreeout = 0.0;      swconsdensout=1;      break;    case 'd':      if(xarg+1 >= argc) usage();      swmindegree = readfloatarg(&xarg,argv);      if((xarg+2 < argc) && (argv[xarg+1][0]!='-')){	swmaxdegree = readfloatarg(&xarg,argv);	swstepdegree = readfloatarg(&xarg,argv);      }      else{	swmaxdegree = swmindegree;	swstepdegree = 1.0;      }      if (swmindegree != 0.0) swminconsdensity = 0.0;      break;    case 'D':      if(xarg+1 >= argc) usage();      swmindegreeout = readfloatarg(&xarg,argv);      if((xarg+2 < argc) && (argv[xarg+1][0]!='-')){	swmaxdegreeout = readfloatarg(&xarg,argv);	swstepdegreeout = readfloatarg(&xarg,argv);      }      else{	swmaxdegreeout = swmindegreeout;	swstepdegreeout = 1.0;      }      if (swmindegreeout != 0.0) swminconsdensityout = 0.0;      swdegreeout=1;      break;    case 'e':      swequaldistribution=1;      break;    case 'g':      if(xarg+1 >= argc) usage();      minsize = readintarg(&xarg,argv);      swminsize = 1;      break;    case 'i':      if(xarg+1 >= argc) usage();      swinstances = readintarg(&xarg,argv);      break;    case 'l':      if(xarg+1 >= argc) usage();      swminlabsiz = readfloatarg(&xarg,argv);      if((xarg+2 < argc) && (argv[xarg+1][0]!='-')){	swmaxlabsiz = readfloatarg(&xarg,argv);	swsteplabsiz = readfloatarg(&xarg,argv);      }      else{	swmaxlabsiz = swminlabsiz;	swsteplabsiz = 1.0;      }      break;   case 'L':      if(xarg+1 >= argc) usage();      swminlabsizout = readfloatarg(&xarg,argv);      if((xarg+2 < argc) && (argv[xarg+1][0]!='-')){	swmaxlabsizout = readfloatarg(&xarg,argv);	swsteplabsizout = readfloatarg(&xarg,argv);      }      else{	swmaxlabsizout = swminlabsizout;	swsteplabsizout = 1.0;      }      swlabout=1;      break;    case 'n':      if(xarg+1 >= argc) usage();      swminnodes = readintarg(&xarg,argv);      if((xarg+2 < argc) && (argv[xarg+1][0]!='-')){	swmaxnodes = readintarg(&xarg,argv);	swstepnodes = readintarg(&xarg,argv);      }      else{	swmaxnodes=swminnodes;	swstepnodes=1;      }      maxsize=swmaxnodes+1;      break;    case 'N':      if(xarg+1 >= argc) usage();      swminnodesout = readintarg(&xarg,argv);      if((xarg+2 < argc) && (argv[xarg+1][0]!='-')){	swmaxnodesout = readintarg(&xarg,argv);	swstepnodesout = readintarg(&xarg,argv);      }      else{	swmaxnodesout=swminnodesout;	swstepnodes=1;      }      swnodesout=1;      break;    case 'o':      if(xarg+1 >= argc) usage();      swoutfile=1;      outfile=NULL;      strcpy(prefix,argv[++xarg]);      break;    case 'r':      if(xarg+1 >= argc) usage();      swrestrict = 1;      strcpy(ralgname,argv[++xarg]);      if ((algfile = fopen(ralgname,"r")) == NULL) {	fprintf(stderr,"\n*** Cannot open '%s' for reading\n",argv[xarg]);	exit(-1);      }      if (!(parsealg(algfile,ralg))) {	fprintf(stderr,"\n*** Error in reading rel set from '%s'\n",argv[xarg]);	exit(-1);      }      fclose(algfile);      break;    case 's':      if(xarg+1 >= argc) usage();      swseed = readintarg(&xarg,argv);      break;    case 'u':      swuniform = 1;      break;    case 'x':      if(xarg+1 >= argc) usage();      swexclude = 1;      strcpy(xalgname,argv[++xarg]);      if ((algfile = fopen(xalgname,"r")) == NULL) {	fprintf(stderr,"\n*** Cannot open '%s' for reading\n",argv[xarg]);	exit(-1);      }      if (!(parsealg(algfile,xalg))) { 	fprintf(stderr,"\n*** Error in reading rel set from '%s'\n",argv[xarg]);	exit(-1);      }      fclose(algfile);      break;    default:      usage();    }    xarg++;  }  if ((swinstances < 1) || (swminnodes < 3) ||       (swmaxnodes > MAXCSP) || (swminnodes > swmaxnodes) ||       (swminlabsiz > swmaxlabsiz) || (swmindegree > swmaxdegree) ||      (swminconsdensity > swmaxconsdensity) ||      (swmaxdegree > MAXCSP) || (swmaxlabsiz > 8.0) ||       (swmaxconsdensity > 1.0) ||      ((swminlabsiz < 1.0) && !swrestrict) ||       ((swminconsdensity < 0.01) && (swmindegree < 1.0)) ||      (swnodesout && (swmaxnodes < swminnodesout)) ||      (swdegreeout && (swmaxdegree < swmindegreeout)) ||      (swconsdensout && (swmaxconsdensity < swminconsdensityout)) ||      (swlabout && (swmaxlabsiz < swminlabsizout))){    usage();  }  initrand(swseed);  if(swequaldistribution || swrestrict || swexclude) {    equalnumber=0;    posslabels=0;    for(i=0;i<MAXSET;i++) {      if(xalg[i]) continue;      if(ralg[i] || !swrestrict) {	equalalg[equalnumber]=i;	equalnumber++;	posslabels=posslabels | i;      }      else equalalg[i]=0;    }  }      restrictsize = 0;  if (swrestrict) {    for (i=1; i<MAXSET; i++)       if (ralg[i] && 	  ((i != DALL) || (swminconsdensity == 1.0)) && 	   (!swexclude || !xalg[i]))	ralglist[restrictsize++] = i;    if (restrictsize == 0) {      fprintf(stderr,"\n*** Restrict-set has size 0!\n");      exit(-1);    }  }#if defined(DYNAMIC)  csp = (RELTYPE **)malloc(maxsize*sizeof(RELTYPE *));  csp[0] = (RELTYPE *)malloc(maxsize*maxsize*sizeof(RELTYPE));  for(i=1;i<maxsize;i++) {    csp[i] = csp[0] + i * maxsize;   }#endif  for(nd=swminnodes;nd<=swmaxnodes;nd+=swstepnodes){    for(cd=swminconsdensity;cd<=swmaxconsdensity;cd+=swstepconsdensity){      for(dg=swmindegree;dg<=swmaxdegree;dg+=swstepdegree){	for(lbs=swminlabsiz;lbs<=swmaxlabsiz;lbs+=swsteplabsiz){	  if(swoutfile){	    sprintf(outfilename,"%sN%dC%1.0fD%1.0fL%1.0f",prefix,nd,cd*100.0,dg*10.0,lbs*10.0);	    if ((outfile = fopen(outfilename,"a")) == NULL) {	      fprintf(stderr,"\n*** Cannot open '%s' for writing\n",outfilename);	      exit(-1); 	    }	  }	  for (i = 1; i <= swinstances; i++) {	    gennet(csp, csptype, i, nd, randomseed,lbs, cd, dg); 	    	    if(!swminsize || (nd>=minsize))	      if(!swnodesout || ((nd>=swminnodesout) && (nd <=swmaxnodesout)))		if(!swlabout || ((lbs>=swminlabsizout) && (lbs <=swmaxlabsizout)))		  if(!swconsdensout || ((cd>=swminconsdensityout) && (cd <=swmaxconsdensityout)))		    if(!swdegreeout || ((dg>=swmindegreeout) && (dg <=swmaxdegreeout)))		      printcsp(outfile, nd-1, csptype, csp);	  }	  if(swoutfile)	  fclose(outfile);	}      }    }  }  exit(0);}

⌨️ 快捷键说明

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