Esempio n. 1
0
void
Feature::
createLam(int which, ECString tmp, ECString path)
{
  ECString npath("/ltmp/discrim/FOLDS/");
  int b,f;
  int tot = Feature::total[which];
  for(int i = 0 ; i < 20 ; i++)
    {
      ECString ftstr(npath);
      ftstr += intToString(i) + "/";
      ftstr += tmp;
      ftstr += ".lambdas";
      ifstream fts(ftstr.c_str());
      assert(fts);
      for(b = 1; b < 15 ; b++)
	{
	  int bb;
	  if(!fts)
	    {
	      cerr << "Trouble reading lambs for " << which << " in " << ftstr
		   << endl;
	      assert(fts);
	    }
	  fts >> bb ;
	  //cerr << bb << endl;
	  if(bb != b)
	    {
	      cerr << tmp << " " << b << " " << bb << endl;
	      assert(bb == b);
	    }
	  for(f = 2; f <= tot ; f++)
	    {
	      float lam;
	      assert(fts);
	      fts >> lam;
	      //cerr << which << " " << f << " " << b << " " << lam << endl;
	      if(i == 0) Feature::setLambda(which,f,b,lam);
	      else lamVal(which,f,b) += lam;
	    }
	}
    }
  for(b = 1; b < 15 ; b++)
    for(f = 2; f <= tot ; f++) lamVal(which,f,b) /= 20.0;
  
  ECString ftstr(path);
  ftstr += tmp;
  ftstr += ".lambdas";
  ofstream res(ftstr.c_str());
  assert(res);
  res.precision(3);
  printLambdas(res);
} 
Esempio n. 2
0
bool cImage::GetInfo( const std::string& path, int * width, int * height, int * channels ) {
	bool res = stbi_info( path.c_str(), width, height, channels ) != 0;

	if ( !res && cPackManager::instance()->FallbackToPacks() ) {
		std::string npath( path );
		cPack * tPack = cPackManager::instance()->Exists( npath );

		if ( NULL != tPack ) {
			SafeDataPointer PData;

			tPack->ExtractFileToMemory( npath, PData );

			res = 0 != stbi_info_from_memory( PData.Data, PData.DataSize, width, height, channels );
		}
	}

	return res;
}
Esempio n. 3
0
int main (int argc, char * argv[]) {
    GRAPH graph;
    FILE * finput;
    symboltable table;
    EDGE tmpedge;
    ITEM * items;

    finput=fopen(argv[1], "r");
    int V;
    fscanf(finput, "%d", &V);

    graph=GRAPHinit(V);
    table=HASHinit(V);

    items=malloc(V*sizeof(ITEM));
    int i;
    for(i=0; i<V; i++) items[i]=NULL;

    i=0;
    char v1[10+1];
    char v2[10+1];
    while(fscanf(finput, "%s %s", v1, v2)==2) {
        if(HASHreturn(table, v1)==-1) {
            items[i]=ITEMinit(v1);
            HASHinsert(table, items[i], i);
            i++;
        }

        if(HASHreturn(table, v2)==-1) {
            items[i]=ITEMinit(v2);
            HASHinsert(table, items[i], i);
            i++;
        }
        tmpedge=EDGEadd(HASHreturn(table, v1), HASHreturn(table, v2));
        GRAPHinsertE(graph, tmpedge);
    }

    int * solution;
    int cmd, exit=0, path, v, w, j, k;
    while(!exit) {
        i=1;
        printf("\n");
        printf("%d Caclolare il camino semplice di lunghezza minima tra due vertici\n", i++);
        printf("%d Caclolare il camino semplice di lunghezza massima tra due vertici\n", i++);
        printf("%d Caclolare il numero di camini semplici tra due vertici\n", i++);
        printf("%d Calcolare le componenti fortemente connesse al grafo\n", i++);
        printf("%d Individuare un possibile sottoinsieme di archi per ottenere un grafo fortemente connesso\n", i++);
        printf("%d Esci\n--> ", i++);
        scanf("%d", &cmd);
        switch(cmd) {
        case 1:
            printf("Inserire il nome dei due nodi separati da spazio: ");
            scanf("%s %s", v1, v2);
            path=0;
            v=HASHreturn(table, v1);
            w=HASHreturn(table, v2);
            solution = optimalmin(graph, v, w, V);
            printf("Nodi attraversati:\n");
            ITEMshow(items[v], stdout);
            while(v!=w) {
                printf(" -> ");
                v=solution[v];
                ITEMshow(items[v], stdout);
                path++;
            }
            printf("\nLa lunghezza è %d\n", path);
            break;
        case 2:
            printf("Inserire il nome dei due nodi separati da spazio: ");
            scanf("%s %s", v1, v2);
            path=0;
            v=HASHreturn(table, v1);
            w=HASHreturn(table, v2);
            solution = optimalmax(graph, v, w, V);
            printf("Nodi attraversati:\n");
            ITEMshow(items[v], stdout);
            while(v!=w) {
                printf(" -> ");
                v=solution[v];
                ITEMshow(items[v], stdout);
                path++;
            }
            printf("\nLa lunghezza è %d\n", path);
            break;
        case 3:
            printf("Inserire il nome dei due nodi separati da spazio: ");
            scanf("%s %s", v1, v2);
            printf("Il numero dei cammini e' %d\n", npath(graph, HASHreturn(table, v1), HASHreturn(table, v2), V));
            break;
        case 4:
            k=0;
            for(i=0; i<V; i++)
                for(j=i+1; j<V; j++) {
                    if(GRAPHpath(graph, i, j) && GRAPHpath(graph, j, i)) {
                        k++;
                        ITEMshow(items[i], stdout);
                        printf(" e' fortemente connesso con ");
                        ITEMshow(items[j], stdout);
                        printf("\n");
                    }
                }
            printf("Ci sono %d componenti fortemente connesse\n", k);
            break;
        case 5:
            k=0;
            STACK additionaledges=STACKinit();
            for(i=0; i<V; i++) for(j=i+1; j<V; j++) {
                    int ab=GRAPHpath(graph, i, j);
                    int ba=GRAPHpath(graph, j, i);
                    if(!(ab && ba)) {
                        if(!ab) {
                            tmpedge = EDGEadd(i, j);
                            STACKpush(additionaledges, tmpedge);
                            GRAPHinsertE(graph, tmpedge);
                        }
                        if(!ba) {
                            tmpedge = EDGEadd(j, i);
                            STACKpush(additionaledges, tmpedge);
                            GRAPHinsertE(graph, tmpedge);
                        }
                    }
                }
            while(STACKcardinality(additionaledges)) {
                tmpedge=STACKpop(additionaledges);
                ITEMshow(items[tmpedge.v], stdout);
                printf(" -> ");
                ITEMshow(items[tmpedge.w], stdout);
                printf("\n");
            }
            break;
        case 6:
            exit=1;
        }
    }
    return 0;
}