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); }
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; }
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; }