Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def gcd_e(f, s):
- while s:
- f,s = s,f%s
- print(f'GCD : {f}')
- f, s = int(input("Enter 1st (Smaller) Num: ")), int(input("Enter 2nd Num: "))
- gcd_e(f,s)
- OP:
- Enter 1st (Smaller) Num: 14
- Enter 2nd Num: 30
- GCD : 2
- def gcd_d(a,b):
- while a!=b:
- if a>=b:
- a-=b
- else:
- b-=a
- print(f'GCD : {a}')
- a,b = int(input("Enter 1st (Smaller) Num: ")), int(input("Enter 2nd Num: "))
- gcd_d(a,b)
- OP:
- Enter 1st (Smaller) Num: 14
- Enter 2nd Num: 30
- GCD : 2
- def brute_force_match(text,pattern):
- n, m = len(text), len(pattern)
- for i in range(n-m+1):
- j=0
- while j<m and text[i+j]==pattern[j]:
- j+=1
- if j==m:
- print(f'Matched at index {i}')
- return
- print("Not found")
- text, pattern = input("Enter Text: "), input("Enter Pattern to Match: ")
- brute_force_match(text,pattern)
- OP:
- Enter Text: ABBBABAB
- Enter Pattern to Match: ABA
- Matched at index 4
- def merge_sort(arr):
- if len(arr)>1:
- mid=len(arr)//2
- left,right = arr[:mid], arr[mid:]
- merge_sort(left)
- merge_sort(right)
- i=j=k=0
- while i<len(left) and j<len(right):
- if left[i]<right[j]:
- arr[k]=left[i]
- i+=1
- k+=1
- else:
- arr[k]=right[j]
- j+=1
- k+=1
- while i<len(left):
- arr[k]=left[i]
- i+=1
- k+=1
- while j<len(right):
- arr[k]=right[j]
- j+=1
- k+=1
- n = int(input("Enter no. of elements: "))
- arr = []
- for i in range(n):
- arr.append(int(input(f"Enter Element {i+1}: ")))
- print("Original array: ",arr)
- merge_sort(arr)
- print("Sorted array:",arr)
- OP:
- Enter no. of elements: 4
- Enter Element 1: 12
- Enter Element 2: 52
- Enter Element 3: 11
- Enter Element 4: 123
- Original array: [12, 52, 11, 123]
- Sorted array: [11, 12, 52, 123]
- def quick_sort(arr):
- if len(arr)<=1:
- return arr
- pivot = arr[0]
- smaller = [x for x in arr[1:] if x<=pivot]
- bigger = [x for x in arr[1:] if x>pivot]
- return quick_sort(smaller)+[pivot]+quick_sort(bigger)
- arr = list(map(int,input("Enter numbers separated with space: ").split()))
- print(quick_sort(arr))
- OP:
- Enter numbers separated with space: 78 12 56 23 95 10 5 4
- [4, 5, 10, 12, 23, 56, 78, 95]
- import heapq
- def prim(graph, start):
- visited, heap, mst = set(), [(0, start)], []
- while heap:
- cost, node = heapq.heappop(heap)
- if node in visited:
- continue
- visited.add(node)
- mst.append((cost, node))
- for neighbor, weight in graph[node]:
- if neighbor not in visited:
- heapq.heappush(heap, (weight, neighbor))
- return mst
- n = int(input("Enter no. of nodes: "))
- nodes = input("Enter Node Names (Capital): ").split()
- graph = {node: [] for node in nodes}
- print("Now Enter Adjacency List For Each Node One by One:")
- for _ in range(n):
- data = input().split()
- graph[data[0]].extend((data[i],int(data[i+1])) for i in range(1,len(data),2))
- start = input("Enter the start node: ").strip()
- mst = prim(graph, start)
- for cost, node in mst:
- print(f"Node: {node}, Cost: {cost}")
- OP:
- Enter no. of nodes: 3
- Enter Node Names (Capital): X Y Z
- Now Enter Adjacency List For Each Node One by One:
- X Y 3 Z 2
- Y X 3 Z 1
- Z X 2 Y 1
- Enter the start node: X
- Node: X, Cost: 0
- Node: Z, Cost: 2
- Node: Y, Cost: 1
- class DisjointSet:
- def __init__(self, n):
- self.parent = list(range(n))
- self.rank = [0]*n
- def find(self, u):
- if self.parent[u] != u:
- self.parent[u] = self.find(self.parent[u])
- return self.parent[u]
- def union(self, u, v):
- ru, rv = self.find(u), self.find(v)
- if ru == rv:
- return
- if self.rank[ru] > self.rank[rv]:
- self.parent[rv] = ru
- elif self.rank[ru] < self.rank[rv]:
- self.parent[ru] = rv
- else:
- self.parent[rv] = ru
- self.rank[ru] += 1
- def kruskal(edges, n):
- edges.sort(key=lambda x: x[2])
- ds, mst = DisjointSet(n), []
- for u, v, w in edges:
- if ds.find(u) != ds.find(v):
- ds.union(u, v)
- mst.append((u, v, w))
- return mst
- n = int(input("Enter number of nodes: "))
- m = int(input("Enter number of edges: "))
- edges = [tuple(map(int, input().split())) for _ in range(m)]
- for u, v, w in kruskal(edges, n):
- print(f"Edge: {u} - {v}, Weight: {w}")
- OP:
- Enter number of nodes: 5
- Enter number of edges: 7
- 0 1 10
- 0 2 6
- 0 3 5
- 1 3 15
- 2 3 4
- 3 4 2
- 1 4 8
- Edge: 3 - 4, Weight: 2
- Edge: 2 - 3, Weight: 4
- Edge: 0 - 3, Weight: 5
- Edge: 1 - 4, Weight: 8
- def fractional_knapsack(capacity, items):
- items.sort(key=lambda x: x[0]/x[1], reverse=True)
- max_val = 0.0
- for value, weight in items:
- if capacity >= weight:
- max_val += value
- capacity -= weight
- else:
- return round(max_val + value * (capacity / weight), 6)
- return round(max_val, 6)
- n, w = int(input("Enter no. of items: ")), int(input("Enter maximum capacity: "))
- print("Now enter value weight pair for each item")
- item_list = list(map(int, input().split()))
- items = [(item_list[i],item_list[i+1]) for i in range(0, len(item_list), 2)]
- print("Maximum Total Value:",fractional_knapsack(w, items))
- OP:
- Enter no. of items: 3
- Enter maximum capacity: 50
- Now enter value weight pair for each item
- 60 10 100 20 120 30
- Maximum Total Value: 240.0
- def floyd_warshall(n,edges):
- INF = float('inf')
- dist = [[INF] * n for _ in range(n)]
- for i in range(n):
- dist[i][i] = 0
- for u,v,w in edges:
- dist[u-1][v-1] = w
- for k in range(n):
- for i in range(n):
- for j in range(n):
- dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
- return dist
- n, e = int(input("Enter no. of vertices: ")), int(input("Enter no. of edges: "))
- edges = [tuple(map(int, input().split())) for _ in range(e)]
- print("Shortest Distance Matrix:")
- for row in floyd_warshall(n,edges):
- print(*["INF" if x == float('inf') else x for x in row],"")
- OP:
- Enter no. of vertices: 4
- Enter no. of edges: 5
- 1 2 4
- 1 4 10
- 1 3 6
- 2 4 5
- 3 4 2
- Shortest Distance Matrix:
- 0 4 6 8
- INF 0 INF 5
- INF INF 0 2
- INF INF INF 0
- def warshall_algorithm(graph, n):
- for k in range(n):
- for i in range(n):
- for j in range(n):
- graph[i][j] |= graph[i][k] and graph[k][j]
- return graph
- n = int(input("Enter the no. of vertices: ").strip())
- graph = [list(map(int, input().split())) for _ in range(n)]
- transitive_closure = warshall_algorithm(graph, n)
- print("Transitive Closure Matrix:")
- for row in transitive_closure:
- print(" ".join(map(str, row)))
- OP:
- Enter the no. of vertices: 4
- 0 1 0 0
- 0 0 1 1
- 0 0 0 0
- 1 0 1 0
- Transitive Closure Matrix:
- 1 1 1 1
- 1 1 1 1
- 0 0 0 0
- 1 1 1 1
- def count_topo_sorts(v,edges):
- from collections import defaultdict
- adj = defaultdict(list)
- in_degree = [0]*V
- for u,v in edges:
- adj[u].append(v)
- in_degree[v] += 1
- visited = [False]*V
- count = [0]
- def backtrack(path):
- if len(path) == V:
- count[0] += 1
- return
- for i in range(V):
- if not visited[i] and in_degree[i]==0:
- visited[i] = True
- for neighbor in adj[i]:
- in_degree[neighbor] -= 1
- backtrack(path+[i])
- visited[i] = False
- for neighbor in adj[i]:
- in_degree[neighbor] += 1
- backtrack([])
- return count[0]
- V,E = int(input("Enter no. of vertices: ")), int(input("Enter no. of edges: "))
- edges = [tuple(map(int, input().split())) for _ in range(E)]
- print("Count of possible topological sorts: ",count_topo_sorts(V, edges))
- OP:
- Enter no. of vertices: 6
- Enter no. of edges: 6
- 2 3
- 3 0
- 3 1
- 4 0
- 4 2
- 5 1
- Count of possible topological sorts: 9
- def subset_sum(arr,N,target_sum):
- for i in range(len(arr)):
- for j in range(len(arr)):
- if arr[i]+arr[j]==target_sum:
- return True
- return False
- N=int(input("Enter no. of elements in array: "))
- arr=list(map(int, input().split()))
- target_sum=int(input("Enter target sum: "))
- print(subset_sum(arr,N,target_sum))
- OP:
- Enter no. of elements in array: 6
- 3 34 4 12 5 2
- Enter target sum: 9
- True
- def is_safe(board, row, col, n):
- return all(board[i][col] == 0 and
- (col - (row - i) < 0 or board[i][col - (row - i)] == 0) and
- (col + (row - i) >= n or board[i][col + (row - i)] == 0) for i in range(row))
- def solve(board, row, n):
- if row == n:
- print("\n".join(" ".join(map(str, r)) for r in board))
- return True
- for col in range(n):
- if is_safe(board, row, col, n):
- board[row][col] = 1
- if solve(board, row + 1, n):
- return True
- board[row][col] = 0
- return False
- n = int(input("Enter number of queens: "))
- board = [[0] * n for _ in range(n)]
- if not solve(board, 0, n):
- print("No solution found.")
- OP:
- Enter number of queens: 4
- 0 1 0 0
- 0 0 0 1
- 1 0 0 0
- 0 0 1 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement