📄 gencsp.c
字号:
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 + -