/* test local file -----------------------------------------------------------*/ static int test_local(gtime_t ts, gtime_t te, double ti, const char *path, const char *sta, const char *dir, int *nc, int *nt, FILE *fp) { gtime_t time; char remot[1024],remot_p[1024],dir_t[1024],local[1024],str[1024]; int stat,abort=0; for (time=ts;timediff(time,te)<=1E-3;time=timeadd(time,ti)) { sprintf(str,"%s->%s",path,local); if (showmsg(str)) { abort=1; break; } genpath(path,sta,time,0,remot); genpath(dir ,sta,time,0,dir_t); remot2local(remot,dir_t,local); stat=test_file(local); fprintf(fp," %s",stat==0?"-":(stat==1?"o":"z")); showmsg("STAT=%s",stat==0?"x":(stat==1?"o":"z")); (*nt)++; if (stat) (*nc)++; } fprintf(fp,"\n"); return abort; }
void genpath(int v1, int v2, vector<string> &vdict, vector<vector<int> >& prev, vector<int> res){ res.push_back(v2); if(v1 == v2){ vector<string> result; for(int i = res.size() -1; i >= 0; i --){ result.push_back(vdict[res[i]]); } results.push_back(result); return; } vector<int> adj = prev[v2]; for(int i = 0; i < adj.size(); i ++){ genpath(v1,adj[i],vdict,prev,res); } res.pop_back(); return; }
void main() { int i, j, l, pro, sum, path[20]; printf("Enter number of cities: "); scanf("%d", &n); init(n - 1, 1); for (i = 2; i <= n; i++) { temp.a[i - 2] = i; artemp[i - 2] = i; temp.sum += i; temp.pro *= i; } pro = temp.pro; sum = temp.sum; set[++c] = temp; fill(1, artemp, n - 2); sort(); printf("\n"); for (i = 0; i < n; i++) for (j = 0; j < n; j++) { scanf("%d", &dist[i][j]); if (j == 0 && i != 0) set[find(1, 0, i+1)].cost = dist[i][0]; } for (i = n-1; i <= c; i++) cost(set[i].pro, set[i].sum, set[i].parent, set[i].k); printf("\n\n"); for (i = 0; i <= c; i++) { printf("g(%d, ", set[i].parent); if (set[i].k > 0) { printf("{%d", set[i].a[0]); for (j = 1; j < set[i].k; j++) printf(", %d", set[i].a[j]); printf("}"); } printf(") = %d ", set[i].cost); for (l = 0; l < set[c].k - set[i].k/2; l++) printf(" "); printf("p(%d, ", set[i].parent); if (set[i].k > 0) { printf("{%d", set[i].a[0]); for (j = 1; j < set[i].k; j++) printf(", %d ", set[i].a[j]); printf("}"); } printf(") = %d\n\n", set[i].min); } genpath(path); printf("\nDistance travelled: %d\n", set[c].cost); printf("\n\nPath: 1 --> "); for (i = 0; i < n - 1; i++) printf("%d --> ", path[i]); printf("1"); getch(); }
/* generate download path ----------------------------------------------------*/ static int gen_path(gtime_t time, gtime_t time_p, int seqnos, int seqnoe, const url_t *url, const char *sta, const char *dir, paths_t *paths) { char remot[1024],remot_p[1024],dir_t[1024]; int i; if (!*dir) dir=url->dir; if (!*dir) dir="."; if (strstr(url->path,"%N")) { for (i=seqnos;i<=seqnoe;i++) { genpath(url->path,sta,time,i,remot); genpath(dir ,sta,time,i,dir_t); if (time_p.time) { genpath(url->path,sta,time_p,i,remot_p); if (!strcmp(remot_p,remot)) continue; } if (!add_path(paths,remot,dir_t)) return 0; } } else { genpath(url->path,sta,time,0,remot); genpath(dir ,sta,time,0,dir_t); if (time_p.time) { genpath(url->path,sta,time_p,0,remot_p); if (!strcmp(remot_p,remot)) return 1; } if (!add_path(paths,remot,dir_t)) return 0; } return 1; }
vector<vector<string>> findLadders(string start, string end, unordered_set<string> &dict) { // Start typing your C/C++ solution below // DO NOT write int main() function dict.insert(start); dict.insert(end); vector<string> vdict(dict.begin(), dict.end()); // vector dictionary: id -> word mapping in dict unordered_map<string, int> ids; // index dictionary: word -> id mapping in vdict vector<vector<int> > prev(dict.size()); // store the previous words in BFS vector<int> distance(dict.size(), -1); // store the distance from start // build string - index mapping, transfer problem to graph search // use interger instead of string to eliminate cost of string matching for(int i = 0; i < vdict.size(); i++) ids[vdict[i]] = i; // find the index of start and end words int vbeg=0, vend=0; while(vdict[vbeg] != start) vbeg++; while(vdict[vend] != end) vend++; // use queue for BFS to search path from start to end queue<int> que; que.push(vbeg); distance[vbeg]=0; while(!que.empty()){ int now = que.front(); que.pop(); if(now == vend){ break; } int d = distance[now]+1; vector<int> adj; ids.erase(vdict[now]); for(int i = 0; i < vdict[now].size(); i ++){ char w = vdict[now][i]; for(char j = 'a'; j <= 'z'; j ++){ vdict[now][i] = j; if(ids.count(vdict[now])){ adj.push_back(ids[vdict[now]]); } vdict[now][i] = w; } } for(int i = 0; i < adj.size(); i ++){ if(distance[adj[i]] == -1){ distance[adj[i]] = d; que.push(adj[i]); prev[adj[i]].push_back(now); } else if(distance[adj[i]] == d){ prev[adj[i]].push_back(now); } } } results.clear(); path.clear(); genpath(vbeg, vend, vdict, prev, path); return results; }
/* execute local file test ----------------------------------------------------- * execute local file test * args : gtime_t ts,te I time start and end * double tint I time interval (s) * url_t *urls I download urls * int nurl I number of urls * char **stas I stations * int nsta I number of stations * char *dir I local directory * int ncol I number of column * int datefmt I date format (0:year-dow,1:year-dd/mm,2:week) * FILE *fp IO log test result file pointer * return : status (1:ok,0:error,-1:aborted) *-----------------------------------------------------------------------------*/ extern void dl_test(gtime_t ts, gtime_t te, double ti, const url_t *urls, int nurl, char **stas, int nsta, const char *dir, int ncol, int datefmt, FILE *fp) { gtime_t time; double tow; char year[32],date[32],date_p[32]; int i,j,n,m,*nc,*nt,week,flag,abort=0; if (ncol<1) ncol=1; else if (ncol>200) ncol=200; fprintf(fp,"** LOCAL DATA AVAILABILITY (%s, %s) **\n\n", time_str(timeget(),0),*dir?dir:"*"); for (i=n=0;i<nurl;i++) { n+=strstr(urls[i].path,"%s")||strstr(urls[i].path,"%S")?nsta:1; } nc=imat(n,1); nt=imat(n,1); for (i=0;i<n;i++) nc[i]=nt[i]=0; for (;timediff(ts,te)<1E-3&&!abort;ts=timeadd(ts,ti*ncol)) { genpath(datefmt==0?" %Y-":"%Y/%m/","",ts,0,year); if (datefmt<=1) fprintf(fp,"%s %s",datefmt==0?"DOY ":"DATE",year); else fprintf(fp,"WEEK "); *date_p='\0'; flag=0; m=datefmt==2?1:2; for (i=0;i<(ncol+m-1)/m;i++) { time=timeadd(ts,ti*i*m); if (timediff(time,te)>=1E-3) break; if (datefmt<=1) { genpath(datefmt==0?"%n":"%d","",time,0,date); fprintf(fp,"%-4s",strcmp(date,date_p)?date:""); } else { if (fabs(time2gpst(time,&week))<1.0) { fprintf(fp,"%04d",week); flag=1; } else { fprintf(fp,"%s",flag?"":" "); flag=0; } } strcpy(date_p,date); } fprintf(fp,"\n"); for (i=j=0;i<nurl&&!abort;i++) { time=timeadd(ts,ti*ncol-1.0); if (timediff(time,te)>=0.0) time=te; /* test local files */ abort=test_locals(ts,time,ti,urls+i,stas,nsta,dir,nc+j,nt+j,fp); j+=strstr(urls[i].path,"%s")||strstr(urls[i].path,"%S")?nsta:1; } fprintf(fp,"\n"); } fprintf(fp,"# COUNT : FILES/TOTAL\n"); for (i=j=0;i<nurl;i++) { j+=print_total(urls+i,stas,nsta,nc+j,nt+j,fp); } free(nc); free(nt); }