Пример #1
0
/*
 * 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;
}
Пример #2
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;
 }
Пример #3
0
 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;
 }
Пример #4
0
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);

}
Пример #5
0
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);
}
Пример #6
0
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;
}
Пример #7
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;
 }
Пример #8
0
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);
}
Пример #9
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);
     }
 }
Пример #10
0
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;
        }
    }
}
Пример #13
0
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);
}
Пример #14
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);
}