/* * main logic. * If component is a ".", don't do anything. * If it's a "..", back track one entry. * For everything else, add the entry to the end of our "list" */ int main(int argc, char *argv[]) { char *cur_comp; int i; if (argc != 2) { printf("Usage is ./path_make <string>\n"); return 0; } cur_comp = strtok(argv[1], "/"); while (cur_comp) { if (!strcmp(cur_comp,"..")) { back_track(); } else if (strcmp(cur_comp, ".")) { add_comp(cur_comp); } cur_comp = strtok(NULL, "/"); } printf("\n/"); for (i = 0; i < cur_tail-1; i++) printf("%s/", comp_arr[i]); printf("%s\n", comp_arr[i]); return 0; }
vector<vector<int>> combinationSum3(int k, int n) { vector<vector<int>> res; vector<int> sol; int index = 1; back_track(res, sol, index, k, n); return res; }
vector<vector<int>> permuteUnique(vector<int>& nums) { sort(nums.begin(), nums.end()); vector<vector<int>> res; int index = 0; back_track(res, index, nums); return res; }
void knapsack() { int weight, value, max_i, max_j, max = -1; for (int i = n - 1; i >= 0 ; i--) { for (int j = w - 1; j >= 0; j--) { weight = items[i].weight; value = items[i].value; // Determine wether adding the item or not results in a higher total value. if (j - weight >= 0 && mem[i + 1][j] < mem[i + 1][j - weight] + value) { mem[i][j] = mem[i + 1][j - weight] + value; parent_pointer[i][j] = weight; } else { mem[i][j] = mem[i + 1][j]; parent_pointer[i][j] = 0; } // Store the position of the optimal value. if (max <= mem[i][j]) { max = mem[i][j]; max_i = i; max_j = j; } } } back_track(max_i, max_j); }
void solve(t_tetab tetrimini, t_i const length) { t_i side; side = guess_what(length); while (!back_track(tetrimini, length, side, 0)) side++; print_solution(tetrimini, length, side); }
int main(void) { int a[NMAX]; /* solution vector */ int i; /* counter */ for(i = 1; i <= 10; i++) { solution_count = 0; back_track(a, 0, i); printf("n=%d solution_count=%d\n", i, solution_count); } return 0; }
void back_track(vector<vector<int>>& res, vector<int>& sol, int index, int k, int n) { if(n == 0 && sol.size() == k) { res.push_back(sol); } for(int i=index; i<=9; i++) { sol.push_back(i); back_track(res, sol, i+1, k, n-i); sol.pop_back(); } return; }
int go(tetrimini, length, side) { char map[side * side]; if (back_track(tetrimini, length, side, map, 0)) { print_solution(map, side); return (1); } return (0); }
void back_track(vector<vector<int>> &res, int index, vector<int> nums) { if(index == nums.size()) { res.push_back(nums); return; } for(int i = index; i<nums.size(); i++) { if(i != index && nums[i] == nums[index]) continue; swap(nums[i], nums[index]); back_track(res, index+1, nums); } }
int main () { int cas; scanf("%d", &cas); for (int i = 1; i <= cas; i++) { init(); for (int j = 0; j < n; j++) { scanf ("%d%d", &sp[j].d, &sp[j].v); if (sp[j].v) { sp[j].flag = 1; mv = j; } else sp[j].w1 = mv; } back_track(); //op_init scanf("%d", &m); printf("Case #%d:\n", i); char str[5]; int count, x, y; //op while (m--) { scanf("%s", str); if (str[0] == 'Q') { count = 0; scanf("%d", &x); for (int j = 0; j < n; j++) { if (sp[j].flag && sp[j].v <= x) count++; if (sp[j].flag == 0 && find (x, j)) count++; } printf("%d\n", count); } else { scanf("%d%d", &x, &y); sp[x].v = y; } } } return 0; }
int main() { int i,j; for(i=1; i<=5; i++) for(j=1; j<=5; j++) mat[i][j]=0; mat[1][2]=mat[1][3]=mat[1][5]=1; mat[2][1]=mat[2][3]=mat[2][5]=1; mat[3][1]=mat[3][2]=mat[3][4]=mat[3][5]=1; mat[4][5]=mat[4][3]=1; mat[5][1]=mat[5][2]=mat[5][3]=mat[5][4]=1; back_track(1,1); return 0; }
void back_track(int pos,int cnt) { int i; ans[cnt]=pos; if(cnt==9) { for(i=1; i<=9; i++) printf("%d",ans[i]); printf("\n"); return; } for(i=1;i<=5;i++) { if(mat[pos][i]==1) { mat[pos][i]=mat[i][pos]=0; back_track(i,cnt+1); mat[pos][i]=mat[i][pos]=1; } } }
static int back_track(t_tetab tetrimini, t_i const length, t_i const side, t_i const i) { t_tet *const current = tetrimini[i]; if (i == length) return (1); current->pos.coord.y = 0; while (current->pos.coord.y <= side - current->dim.height) { current->pos.coord.x = 0; while (current->pos.coord.x <= side - current->dim.width) { if (is_ok(tetrimini, i) && back_track(tetrimini, length, side, i + 1)) return (1); current->pos.coord.x += 1; } current->pos.coord.y += 1; } return (0); }
static int back_track(t_tetab tetrimini, t_i const length, t_i const side, char *map, t_i const i) { int x; int y; if (i == length) return (1); y = 0; while (y <= side - height) { x = 0; while (x <= side - width) if(is_ok(x, y, tetramini[i], map)) { map[y * side + x] = 'A' + i; if (back_track(tetrimini, length, side, map, i + 1)) return (1); map[y * side + x] = '.'; } y++; } return (0); }