-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbacktracking.py
More file actions
72 lines (53 loc) · 1.62 KB
/
backtracking.py
File metadata and controls
72 lines (53 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Exercise 1:
# Given a list of integers and a target number
# find all the ways you can have the target adding numbers
class FindSum():
def __init__(self, numbers, target):
self.numbers = numbers
self.target = target
self.solution = [None for i in numbers]
self.acumulator = 0
def backtracking(self, k):
if k == len(self.numbers):
if self.acumulator == self.target:
numbers_solution = [self.numbers[n] for n in range(0, len(self.numbers)) if self.solution[n] == True ]
print(numbers_solution)
return True
else:
self.acumulator += self.numbers[k]
self.solution[k] = True
if self.backtracking(k+1) == True:
return True
self.acumulator -= self.numbers[k]
self.solution[k] = None
self.acumulator += 0
self.solution[k] = False
if self.backtracking(k+1) == True:
return True
self.acumulator -= 0
self.solution[k] = None
return False
# case = FindSum([i for i in range(0, 10)], 17)
# case.backtracking(0)
# Exercise 2:
# given a list of integers get all permutations
class FindPermutations():
def __init__(self, numbers):
self.numbers = numbers
self.used = [False for n in self.numbers]
self.solution = list()
def backtracking(self, numbers):
if False not in self.used:
print(self.solution)
else:
for n in range(0, len(self.numbers)):
if self.used[n] == False:
self.used[n] = True
self.solution.append(self.numbers[n])
self.backtracking(self.numbers[n+1:len(self.numbers)])
self.used[n] = False
self.solution.pop()
return
numbers = [i for i in range(0, 4)]
case = FindPermutations(numbers)
case.backtracking(numbers)