├── BFS-DFS └── BFS-DFS Iteration │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ ├── 9.png │ └── input.png ├── .ipynb_checkpoints ├── Test-checkpoint.ipynb └── Maximum Flow-checkpoint.ipynb ├── Max Flow ├── input.txt └── Maximum Flow.ipynb ├── Graph Coloring - Heuristic Solution ├── Graph Coloring-Welsh Powell.pdf ├── input.txt ├── debug.log ├── Welsh Powell.py ├── Graph Coloring-Welsh Powell.tex ├── wlesh-powell algorithm_random_input.ipynb └── .ipynb_checkpoints │ └── wlesh-powell algorithm_random_input-checkpoint.ipynb ├── README.md ├── Random Graph Generating (One Component).ipynb └── Strongly Connected Component.ipynb /BFS-DFS/BFS-DFS Iteration/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KalimAmzad/Graph-Theory-in-Python/HEAD/BFS-DFS/BFS-DFS Iteration/1.png -------------------------------------------------------------------------------- /BFS-DFS/BFS-DFS Iteration/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KalimAmzad/Graph-Theory-in-Python/HEAD/BFS-DFS/BFS-DFS Iteration/2.png -------------------------------------------------------------------------------- /BFS-DFS/BFS-DFS Iteration/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KalimAmzad/Graph-Theory-in-Python/HEAD/BFS-DFS/BFS-DFS Iteration/3.png -------------------------------------------------------------------------------- /BFS-DFS/BFS-DFS Iteration/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KalimAmzad/Graph-Theory-in-Python/HEAD/BFS-DFS/BFS-DFS Iteration/4.png -------------------------------------------------------------------------------- /BFS-DFS/BFS-DFS Iteration/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KalimAmzad/Graph-Theory-in-Python/HEAD/BFS-DFS/BFS-DFS Iteration/5.png -------------------------------------------------------------------------------- /BFS-DFS/BFS-DFS Iteration/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KalimAmzad/Graph-Theory-in-Python/HEAD/BFS-DFS/BFS-DFS Iteration/6.png -------------------------------------------------------------------------------- /BFS-DFS/BFS-DFS Iteration/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KalimAmzad/Graph-Theory-in-Python/HEAD/BFS-DFS/BFS-DFS Iteration/7.png -------------------------------------------------------------------------------- /BFS-DFS/BFS-DFS Iteration/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KalimAmzad/Graph-Theory-in-Python/HEAD/BFS-DFS/BFS-DFS Iteration/8.png -------------------------------------------------------------------------------- /BFS-DFS/BFS-DFS Iteration/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KalimAmzad/Graph-Theory-in-Python/HEAD/BFS-DFS/BFS-DFS Iteration/9.png -------------------------------------------------------------------------------- /.ipynb_checkpoints/Test-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [], 3 | "metadata": {}, 4 | "nbformat": 4, 5 | "nbformat_minor": 2 6 | } 7 | -------------------------------------------------------------------------------- /BFS-DFS/BFS-DFS Iteration/input.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KalimAmzad/Graph-Theory-in-Python/HEAD/BFS-DFS/BFS-DFS Iteration/input.png -------------------------------------------------------------------------------- /Max Flow/input.txt: -------------------------------------------------------------------------------- 1 | 10 2 | 0 1 16 3 | 1 3 12 4 | 3 5 20 5 | 4 5 4 6 | 2 4 14 7 | 0 2 13 8 | 4 3 7 9 | 3 2 9 10 | 1 2 10 11 | 2 1 4 12 | -------------------------------------------------------------------------------- /Graph Coloring - Heuristic Solution/Graph Coloring-Welsh Powell.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KalimAmzad/Graph-Theory-in-Python/HEAD/Graph Coloring - Heuristic Solution/Graph Coloring-Welsh Powell.pdf -------------------------------------------------------------------------------- /Graph Coloring - Heuristic Solution/input.txt: -------------------------------------------------------------------------------- 1 | 17 2 | 3 7 3 | 0 7 4 | 0 1 5 | 1 3 6 | 3 2 7 | 3 8 8 | 3 10 9 | 7 8 10 | 7 9 11 | 7 10 12 | 7 6 13 | 8 9 14 | 9 10 15 | 6 5 16 | 10 4 17 | 5 4 18 | 6 10 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Graph-Theory-in-Python 2 | Graph Theory Algorithm is implemented in python. Jupyter Notebook is used to demonstrate the concept and Networkx library is used in several algorithms to visualize the graph. 3 | -------------------------------------------------------------------------------- /Graph Coloring - Heuristic Solution/debug.log: -------------------------------------------------------------------------------- 1 | [0914/212609.584:ERROR:file_io_win.cc(163)] CreateFile C:\Program Files (x86)\Footper\settings.dat: Access is denied. (0x5) 2 | [0914/212609.604:ERROR:registration_protocol_win.cc(84)] TransactNamedPipe: The pipe has been ended. (0x6D) 3 | [0914/212609.607:ERROR:file_io_win.cc(163)] CreateFile C:\Program Files (x86)\Footper\settings.dat: Access is denied. (0x5) 4 | [0914/212727.279:ERROR:file_io_win.cc(163)] CreateFile C:\Program Files (x86)\Footper\settings.dat: Access is denied. (0x5) 5 | [0914/212727.285:ERROR:registration_protocol_win.cc(84)] TransactNamedPipe: The pipe has been ended. (0x6D) 6 | [0914/212727.288:ERROR:file_io_win.cc(163)] CreateFile C:\Program Files (x86)\Footper\settings.dat: Access is denied. (0x5) 7 | -------------------------------------------------------------------------------- /Graph Coloring - Heuristic Solution/Welsh Powell.py: -------------------------------------------------------------------------------- 1 | #implementation of welsh_powell algorithm 2 | def welsh_powell(G): 3 | #sorting the nodes based on it's valency 4 | node_list = sorted(G.nodes(), key =lambda x:G.degree(x)) 5 | col_val = {} #dictionary to store the colors assigned to each node 6 | col_val[node_list[0]] = 0 #assign the first color to the first node 7 | # Assign colors to remaining N-1 nodes 8 | for node in node_list[1:]: 9 | available = [True] * len(G.nodes()) #boolean list[i] contains false if the node color 'i' is not available 10 | 11 | #iterates through all the adjacent nodes and marks it's color as unavailable, if it's color has been set already 12 | for adj_node in G.neighbors(node): 13 | if adj_node in col_val.keys(): 14 | col = col_val[adj_node] 15 | available[col] = False 16 | clr = 0 17 | for clr in range(len(available)): 18 | if available[clr] == True: 19 | break 20 | col_val[node] = clr 21 | print (col_val) 22 | return col_val 23 | 24 | 25 | 26 | 27 | 28 | #takes input from the file and creates a undirected graph 29 | def CreateGraph(): 30 | G = nx.Graph() 31 | f = open('input.txt') 32 | n = int(f.readline()) 33 | for i in range(n): 34 | graph_edge_list = f.readline().split() 35 | G.add_edge(graph_edge_list[0], graph_edge_list[1]) 36 | return G 37 | 38 | 39 | #draws the graph and displays the weights on the edges 40 | def DrawGraph(G,col_val): 41 | #pos = nx.spring_layout(G) 42 | values = [] 43 | for node in G.nodes(): 44 | values.append(col_val.get(node, color[col_val.get(node)])) 45 | nx.draw(G, with_labels = True, node_color = values, edge_color = 'black' ,width = 1, alpha = 0.7) #with_labels=true is to show the node number in the output graph 46 | 47 | 48 | 49 | 50 | #main function 51 | if __name__ == "__main__": 52 | G = CreateGraph() 53 | #print(list(G.nodes)) 54 | #print(list(G.edges)) 55 | #print(list(G.adj)) 56 | #print(list(G.degree)) 57 | color = ['blue', 'green', 'yellow', 'orange'] 58 | col_val = welsh_powell(G) 59 | DrawGraph(G,col_val) 60 | plt.show() 61 | -------------------------------------------------------------------------------- /Graph Coloring - Heuristic Solution/Graph Coloring-Welsh Powell.tex: -------------------------------------------------------------------------------- 1 | \documentclass[a4paper,12pt]{article} 2 | \usepackage{amsmath} 3 | \usepackage{xcolor} 4 | \usepackage{lipsum} 5 | \newcommand*{\mybox}[2]{\colorbox{#1!30}{\parbox{.98\linewidth}{#2}}} 6 | %graphics package 7 | \usepackage{graphicx} %to import images 8 | \usepackage{float}%to control of the float positions 9 | 10 | \usepackage[english]{babel} 11 | \usepackage[utf8x]{inputenc} 12 | \usepackage[colorinlistoftodos]{todonotes} 13 | 14 | %programming code package 15 | \usepackage{listings} 16 | \usepackage{color} 17 | \definecolor{dkgreen}{rgb}{0,0.6,0} 18 | \definecolor{gray}{rgb}{0.5,0.5,0.5} 19 | \definecolor{mauve}{rgb}{0.58,0,0.82} 20 | \definecolor{lbcolor}{rgb}{0.9,0.9,0.9} 21 | 22 | \begin{document} 23 | \begin{titlepage} 24 | 25 | \newcommand{\HRule}{\rule{\linewidth}{0.5mm}} % Defines a new command for the horizontal lines, change thickness here 26 | 27 | \center % Center everything on the page 28 | 29 | %---------------------------------------------------------------------------------------- 30 | % HEADING SECTIONS 31 | %---------------------------------------------------------------------------------------- 32 | 33 | \textsc{\LARGE International Islamic University Chittagong}\\[1.5cm] % Name of your university/college 34 | %\textsc{\Large Major Heading}\\[0.5cm] % Major heading such as course name 35 | %\textsc{\large Minor Heading}\\[0.5cm] % Minor heading such as course title 36 | %---------------------------------------------------------------------------------------- 37 | % TITLE SECTION 38 | %---------------------------------------------------------------------------------------- 39 | 40 | \HRule \\[0.4cm] 41 | { \huge \bfseries Graph Coloring: A Heuristic Solution}\\[0.4cm] % Title of your document 42 | \HRule \\[1.5cm] 43 | 44 | %---------------------------------------------------------------------------------------- 45 | % AUTHOR SECTION 46 | %---------------------------------------------------------------------------------------- 47 | 48 | \begin{minipage}{0.4\textwidth} 49 | \begin{flushleft} \large 50 | \emph{Submitted By:}\\ 51 | Md. Kalim Amzad Chy\\ % Your name 52 | ID: C151113\\ 53 | 7CM 54 | \end{flushleft} 55 | \end{minipage} 56 | ~ 57 | \begin{minipage}{0.4\textwidth} 58 | \begin{flushright} \large 59 | \emph{Sbmitted To:} \\ 60 | Dr. Kazi Ashrafuzzaman % Supervisor's Name 61 | Associate Professor, 62 | Dept. of CSE., CU 63 | \end{flushright} 64 | \end{minipage}\\[2cm] 65 | 66 | % If you don't want a supervisor, uncomment the two lines below and remove the section above 67 | %\Large \emph{Author:}\\ 68 | %John \textsc{Smith}\\[3cm] % Your name 69 | 70 | %---------------------------------------------------------------------------------------- 71 | % DATE SECTION 72 | %---------------------------------------------------------------------------------------- 73 | 74 | %{\large \today}\\[2cm] % Date, change the \today to a set date if you want to be precise 75 | 76 | %---------------------------------------------------------------------------------------- 77 | % LOGO SECTION 78 | %---------------------------------------------------------------------------------------- 79 | \includegraphics[height=1.5in]{C:/Users/Parents/Desktop/Latex/logo.png} 80 | %\includegraphics{logo.png}\\[1cm] % Include a department/university logo - this will require the graphicx package 81 | 82 | %---------------------------------------------------------------------------------------- 83 | 84 | \vfill % Fill the rest of the page with whitespace 85 | 86 | \end{titlepage} 87 | 88 | \newpage 89 | \section{Introduction} 90 | In graph theory, graph coloring is a special case of graph labeling; it is an assignment of labels traditionally called "colors" to elements of a graph subject to certain constraints. In its simplest form, it is a way of coloring the vertices of a graph such that no two adjacent vertices share the same color; this is called a vertex coloring. Similarly, an edge coloring assigns a color to each edge so that no two adjacent edges share the same color, and a face coloring of a planar graph assigns a color to each face or region so that no two faces that share a boundary have the same color. 91 | 92 | The greedy algorithm considers the vertices in a specific order $ v_{1},...., v_{n}$ and assigns to $v_{i}$ the smallest available color not used by $v_{i}$’s neighbours among $v_{1},...., v_{i-1} $ adding a fresh color if needed. The quality of the resulting coloring depends on the chosen ordering. There exists an ordering that leads to a greedy coloring with the optimal number of $X(G)$ colors. On the other hand, greedy colorings can be arbitrarily bad; for example, the crown graph on $n$ vertices can be 2-colored, but has an ordering that leads to a greedy coloring with $n/2$ colors. If the vertices are ordered according to their degrees, the resulting greedy coloring uses at most $max_i\ min\{d(x_i)+1,i\}$ colors, at most one more than the graph’s maximum degree. 93 | \newpage 94 | \section{Welsh-Powell Algorithm} 95 | In 1967 Welsh and Powell introduced in an upper bound to the chromatic number of a graph . It provides a greedy algorithm that runs on a static graph. 96 | 97 | Welsh Powell is used to implement graph labeling; it is an assignment of labels traditionally called "colors" to elements of a graph subject to certain constraints. 98 | 99 | The vertices are ordered according to their degrees, the resulting greedy coloring uses at most $max_i\ min\{d(x_i)+1,i\}$ colors, at most one more than the graph’s maximum degree. This heuristic is called the Welsh–Powell algorithm. 100 | \subsection{Proof and Coloring Complexity} 101 | The degree of a vertex $A_i$ of the graph $G$ is the number of edges having $A_i$ as an endpoint, and we will denote it by $d_i$. Without loss of generality we assume that 102 | \begin{equation} 103 | d_1 \geq d_2 \geq ...\geq d_n 104 | \end{equation} 105 | It is easy to show that if $k(G)$ denotes the chromatic number of $G$ then 106 | \begin{equation} 107 | k(G) \leq d_1 + 1 108 | \end{equation} 109 | and provided G contains no $d_1$-simplices, then from (2) we know 110 | \begin{equation} 111 | k(G) \leq d_1 112 | \end{equation} 113 | 114 | G may always be coloured in at most $\alpha(G)$ colours where 115 | \begin{equation} 116 | k(G) \leq \alpha(G) \leq max_i\ min\{d(x_i)+1,i\} 117 | \end{equation} 118 | \subsubsection{Theorem 1} 119 | If $G$ is a $k-$critical graph, then 120 | \begin{equation*} 121 | \delta(G) \geq k-1 122 | \end{equation*} 123 | \textit{Proof:} 124 | Let $ v $ be a vertex of $ G $ so that $d(v)" 138 | ] 139 | }, 140 | "metadata": {}, 141 | "output_type": "display_data" 142 | }, 143 | { 144 | "data": { 145 | "image/png": "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\nAEv+P3c3Q7p1+5hzAAAAAElFTkSuQmCC\n", 146 | "text/plain": [ 147 | "" 148 | ] 149 | }, 150 | "metadata": {}, 151 | "output_type": "display_data" 152 | } 153 | ], 154 | "source": [ 155 | "if __name__ == \"__main__\":\n", 156 | " G = CreateGraph()\n", 157 | " #print(list(G.nodes))\n", 158 | " #print(list(G.edges))\n", 159 | " #print(list(G.adj))\n", 160 | " #print(list(G.degree))\n", 161 | " col_val = WelshPowell(G)\n", 162 | " DrawOriginalGraph(G)\n", 163 | " plt.show()\n", 164 | " DrawSolutionGraph(G,col_val)\n", 165 | " plt.show()\n", 166 | " " 167 | ] 168 | }, 169 | { 170 | "cell_type": "code", 171 | "execution_count": null, 172 | "metadata": { 173 | "collapsed": true 174 | }, 175 | "outputs": [], 176 | "source": [] 177 | } 178 | ], 179 | "metadata": { 180 | "kernelspec": { 181 | "display_name": "Python 3", 182 | "language": "python", 183 | "name": "python3" 184 | }, 185 | "language_info": { 186 | "codemirror_mode": { 187 | "name": "ipython", 188 | "version": 3 189 | }, 190 | "file_extension": ".py", 191 | "mimetype": "text/x-python", 192 | "name": "python", 193 | "nbconvert_exporter": "python", 194 | "pygments_lexer": "ipython3", 195 | "version": "3.6.3" 196 | } 197 | }, 198 | "nbformat": 4, 199 | "nbformat_minor": 2 200 | } 201 | -------------------------------------------------------------------------------- /Graph Coloring - Heuristic Solution/.ipynb_checkpoints/wlesh-powell algorithm_random_input-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import networkx as nx\n", 12 | "import matplotlib.pyplot as plt\n", 13 | "import random" 14 | ] 15 | }, 16 | { 17 | "cell_type": "markdown", 18 | "metadata": {}, 19 | "source": [ 20 | "## Welsh Powell algorithm" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 13, 26 | "metadata": { 27 | "collapsed": true 28 | }, 29 | "outputs": [], 30 | "source": [ 31 | "def WelshPowell(G):\n", 32 | " #sorting the nodes based on it's degree\n", 33 | " node_list = sorted(G.nodes(), key =lambda x:G.degree[x])\n", 34 | " #print(node_list)\n", 35 | " col_val = {} \n", 36 | " col_val[node_list[0]] = 0 \n", 37 | " \n", 38 | " for node in node_list[1:]:\n", 39 | " available = [True] * len(G.nodes())\n", 40 | "\n", 41 | " for adj_node in G.neighbors(node): \n", 42 | " if adj_node in col_val.keys():\n", 43 | " col = col_val[adj_node]\n", 44 | " available[col] = False\n", 45 | " clr = 0\n", 46 | " for clr in range(len(available)):\n", 47 | " if available[clr] == True:\n", 48 | " break\n", 49 | " col_val[node] = clr\n", 50 | " #print (col_val)\n", 51 | " return col_val\n" 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "## Creating the Graph" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 2, 64 | "metadata": { 65 | "collapsed": true 66 | }, 67 | "outputs": [], 68 | "source": [ 69 | "def CreateGraph():\n", 70 | " G = nx.Graph()\n", 71 | " n = random.randint(5, 10)\n", 72 | " for i in range(n):\n", 73 | " graph_edge_list = random.randint(0, n), random.randint(0, n)\n", 74 | " G.add_edge(graph_edge_list[0], graph_edge_list[1]) \n", 75 | " return G\n" 76 | ] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "metadata": {}, 81 | "source": [ 82 | "## Drawing Original Graph" 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": 3, 88 | "metadata": { 89 | "collapsed": true 90 | }, 91 | "outputs": [], 92 | "source": [ 93 | "def DrawOriginalGraph(G):\n", 94 | " pos = nx.spring_layout(G)\n", 95 | " nx.draw(G, pos, with_labels = True, node_color = \"green\", edge_color = 'black' ,width = 1, alpha = 0.7) #with_labels=true is to show the node number in the output graph\n" 96 | ] 97 | }, 98 | { 99 | "cell_type": "markdown", 100 | "metadata": {}, 101 | "source": [ 102 | "## Drawing Solution Graph" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 5, 108 | "metadata": { 109 | "collapsed": true 110 | }, 111 | "outputs": [], 112 | "source": [ 113 | "def DrawSolutionGraph(G,col_val):\n", 114 | " pos = nx.spring_layout(G)\n", 115 | " values = []\n", 116 | " for node in G.nodes():\n", 117 | " values.append(col_val.get(node, col_val.get(node)))\n", 118 | " nx.draw(G, pos, with_labels = True, node_color = values, edge_color = 'black' ,width = 1, alpha = 0.7) #with_labels=true is to show the node number in the output graph\n" 119 | ] 120 | }, 121 | { 122 | "cell_type": "markdown", 123 | "metadata": {}, 124 | "source": [ 125 | "## Driving Function" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": 15, 131 | "metadata": {}, 132 | "outputs": [ 133 | { 134 | "data": { 135 | "image/png": "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\nQFOyOu0SpoAAAAAASUVORK5CYII=\n", 136 | "text/plain": [ 137 | "" 138 | ] 139 | }, 140 | "metadata": {}, 141 | "output_type": "display_data" 142 | }, 143 | { 144 | "data": { 145 | "image/png": "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\nAEv+P3c3Q7p1+5hzAAAAAElFTkSuQmCC\n", 146 | "text/plain": [ 147 | "" 148 | ] 149 | }, 150 | "metadata": {}, 151 | "output_type": "display_data" 152 | } 153 | ], 154 | "source": [ 155 | "if __name__ == \"__main__\":\n", 156 | " G = CreateGraph()\n", 157 | " #print(list(G.nodes))\n", 158 | " #print(list(G.edges))\n", 159 | " #print(list(G.adj))\n", 160 | " #print(list(G.degree))\n", 161 | " col_val = WelshPowell(G)\n", 162 | " DrawOriginalGraph(G)\n", 163 | " plt.show()\n", 164 | " DrawSolutionGraph(G,col_val)\n", 165 | " plt.show()\n", 166 | " " 167 | ] 168 | }, 169 | { 170 | "cell_type": "code", 171 | "execution_count": null, 172 | "metadata": { 173 | "collapsed": true 174 | }, 175 | "outputs": [], 176 | "source": [] 177 | } 178 | ], 179 | "metadata": { 180 | "kernelspec": { 181 | "display_name": "Python 3", 182 | "language": "python", 183 | "name": "python3" 184 | }, 185 | "language_info": { 186 | "codemirror_mode": { 187 | "name": "ipython", 188 | "version": 3 189 | }, 190 | "file_extension": ".py", 191 | "mimetype": "text/x-python", 192 | "name": "python", 193 | "nbconvert_exporter": "python", 194 | "pygments_lexer": "ipython3", 195 | "version": "3.6.3" 196 | } 197 | }, 198 | "nbformat": 4, 199 | "nbformat_minor": 2 200 | } 201 | -------------------------------------------------------------------------------- /Max Flow/Maximum Flow.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import networkx as nx\n", 12 | "import matplotlib.pyplot as plt\n", 13 | "from collections import deque\n", 14 | "import random\n" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "## Breadth First Search -- BFS" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 2, 27 | "metadata": { 28 | "collapsed": true 29 | }, 30 | "outputs": [], 31 | "source": [ 32 | "def BFS(start, target, parent, node):\n", 33 | " queue = deque() \n", 34 | " visited = [False for i in range(node)]\n", 35 | "\n", 36 | " queue.append(start)\n", 37 | " visited[start] = True\n", 38 | " \n", 39 | " while queue:\n", 40 | " u = queue.popleft()\n", 41 | " adj = G.adj[u]\n", 42 | " for v, wt in adj.items():\n", 43 | " if not visited[v] and wt['weight'] > 0:\n", 44 | " queue.append(v)\n", 45 | " visited[v] = True\n", 46 | " parent[v] = u\n", 47 | " \n", 48 | " return True if visited[target] else False\n", 49 | " \n", 50 | " " 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": {}, 56 | "source": [ 57 | "## FordFulkerson Algorithm" 58 | ] 59 | }, 60 | { 61 | "cell_type": "code", 62 | "execution_count": 9, 63 | "metadata": { 64 | "collapsed": true 65 | }, 66 | "outputs": [], 67 | "source": [ 68 | "def FordFulkerson(source, sink, node):\n", 69 | " parent = [0 for i in range(node)]\n", 70 | " max_flow = 0\n", 71 | " \n", 72 | " while BFS(source, sink, parent, node):\n", 73 | " print(\"Parent: \", parent)\n", 74 | " current_flow = 1000000000\n", 75 | " u = sink\n", 76 | " while u is not source:\n", 77 | " wt = int(G[parent[u]][u]['weight'])\n", 78 | " current_flow = min(current_flow, wt) # G[1][key]['weight']\n", 79 | " u = parent[u]\n", 80 | " max_flow += current_flow\n", 81 | " \n", 82 | " v = sink\n", 83 | " while v is not source:\n", 84 | " p = parent[v]\n", 85 | " G[p][v]['weight'] -= current_flow\n", 86 | " G[v][p]['weight'] += current_flow\n", 87 | " v = p\n", 88 | " \n", 89 | " return max_flow\n", 90 | " " 91 | ] 92 | }, 93 | { 94 | "cell_type": "markdown", 95 | "metadata": {}, 96 | "source": [ 97 | "## Creating the Graph" 98 | ] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "execution_count": 4, 103 | "metadata": { 104 | "collapsed": true 105 | }, 106 | "outputs": [], 107 | "source": [ 108 | "def CreateGraph():\n", 109 | " G = nx.DiGraph()\n", 110 | " f = open('input.txt')\n", 111 | " n = int(f.readline())\n", 112 | " for i in range(n):\n", 113 | " u, v, w = f.readline().split()\n", 114 | " u = int(u)\n", 115 | " v = int(v)\n", 116 | " w = int(w)\n", 117 | " #print(u, type(u), v, type(v), w, type(w))\n", 118 | " G.add_edge(u, v, weight = w) \n", 119 | " G.add_edge(v, u, weight = 0)\n", 120 | " return G\n" 121 | ] 122 | }, 123 | { 124 | "cell_type": "markdown", 125 | "metadata": {}, 126 | "source": [ 127 | "## Drawing Graph" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": 5, 133 | "metadata": { 134 | "collapsed": true 135 | }, 136 | "outputs": [], 137 | "source": [ 138 | "def DrawGraph(G, color):\n", 139 | " pos = nx.spring_layout(G)\n", 140 | " nx.draw(G, pos, with_labels = True, node_color = color, edge_color = 'black' ,width = 1, alpha = 0.7) #with_labels=true is to show the node number in the output graph\n" 141 | ] 142 | }, 143 | { 144 | "cell_type": "markdown", 145 | "metadata": {}, 146 | "source": [ 147 | "## Driving Function" 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": 17, 153 | "metadata": { 154 | "scrolled": false 155 | }, 156 | "outputs": [ 157 | { 158 | "name": "stdout", 159 | "output_type": "stream", 160 | "text": [ 161 | "Source: 0\n", 162 | "Sink: 5\n" 163 | ] 164 | }, 165 | { 166 | "data": { 167 | "image/png": "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\nJoni4hDJySlMT08zODiL0+nD673M8HDACHFGRgbZ2dnGph6pqakApKen43A44lbExcXFCrGIyBKh\nOM/LP4k9lR3/7bp0KUhSkoVQ6D2uXJlgbm6OoiIL/f1RIpEo09MBJicnsVgsrFwJDz0UweOJPYx1\n9dSptLQ0I8RXY7xq1SptgSkisoQpzvPSTexVqXjT0xEyMpJxuVz09/cRjUJaWpSZGQupqamkpqaQ\nlpZGUlISGRkzuN3LsVofjFsRl5SU3NGNSEREZOFTnOfFz/XibLUmEQiESU9fRmnpWkZGhklKSiY3\n10J2dhYZGRlkZGSSlZVJVtYsTudOkpOfuvfji4jIgqI4z4uN2OYi8YqL04lEoly6FGTNmhKsVivH\njk2yZUsmW7as+9il6feA3Hs1sIiILGC6sTkvDq4X5/T0ZGpr83j11SGWLctibq6Qc+dC7Nx5vXvG\nUUAHRIiIyI3pPed5mQD+C8jj4xcb/P4QzzzTS3v7BDZbCl//egkPPpj/sa8PAWPA/wLaIlNERP4z\nxXneDgBvACtu4WvfAz4PNN7RiUREZHHSZe15+2/AAgRv8uuCxL7NX77jE4mIyOKkOM+bi9i+2mPM\nP9DBD/9+44dfLyIicmO6rH3TbnwqVewes4/Yzz6NwOfu2XQiIrLwKc63pAv4A7FQh4ld7k7+8PdR\nYsH+LLFL2Voxi4jIzVGcb8sEsa09e4ArxE6sWgd8Bj2VLSIit0pxFhERMRk9ECYiImIyirOIiIjJ\nKM4iIiImoziLiIiYjOIsIiJiMoqziIiIySjOIiIiJqM4i4iImIziLCIiYjKKs4iIiMkoziIiIiaj\nOIuIiJiM4iwiImIyirOIiIjJKM4iIiImoziLiIiYjOIsIiJiMoqziIiIySjOIiIiJqM4i4iImIzi\nLCIiYjKKs4iIiMkoziIiIiajOIuIiJiM4iwiImIyirOIiIjJKM4iIiImoziLiIiYjOIsIiJiMoqz\niIiIySjOIiIiJqM4i4iImIziLCIiYjKKs4iIiMkoziIiIiajOIuIiJiM4iwiImIyirOIiIjJ/B8n\nGQN7Z4pX6gAAAABJRU5ErkJggg==\n", 168 | "text/plain": [ 169 | "" 170 | ] 171 | }, 172 | "metadata": {}, 173 | "output_type": "display_data" 174 | }, 175 | { 176 | "name": "stdout", 177 | "output_type": "stream", 178 | "text": [ 179 | "Parent: [0, 0, 0, 1, 2, 3]\n", 180 | "Parent: [0, 0, 0, 4, 2, 4]\n", 181 | "Parent: [0, 0, 0, 4, 2, 3]\n", 182 | "Max Flow: 23\n" 183 | ] 184 | } 185 | ], 186 | "source": [ 187 | "if __name__ == \"__main__\":\n", 188 | "\n", 189 | " G = CreateGraph()\n", 190 | " \n", 191 | " node = len(G.nodes)\n", 192 | " source = int(input(\"Source: \"))\n", 193 | " sink = int(input(\"Sink: \"))\n", 194 | " \n", 195 | " #print(G.adj[0])\n", 196 | " #print(type(source), type(sink), node, type(node))\n", 197 | " \n", 198 | " DrawGraph(G, \"yellow\")\n", 199 | " plt.show()\n", 200 | " \n", 201 | " print(\"Max Flow: \", FordFulkerson(source, sink, node))\n", 202 | " " 203 | ] 204 | }, 205 | { 206 | "cell_type": "markdown", 207 | "metadata": {}, 208 | "source": [] 209 | } 210 | ], 211 | "metadata": { 212 | "kernelspec": { 213 | "display_name": "Python 3", 214 | "language": "python", 215 | "name": "python3" 216 | }, 217 | "language_info": { 218 | "codemirror_mode": { 219 | "name": "ipython", 220 | "version": 3 221 | }, 222 | "file_extension": ".py", 223 | "mimetype": "text/x-python", 224 | "name": "python", 225 | "nbconvert_exporter": "python", 226 | "pygments_lexer": "ipython3", 227 | "version": "3.6.3" 228 | } 229 | }, 230 | "nbformat": 4, 231 | "nbformat_minor": 2 232 | } 233 | -------------------------------------------------------------------------------- /Random Graph Generating (One Component).ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import networkx as nx\n", 12 | "import matplotlib.pyplot as plt\n", 13 | "from collections import deque\n", 14 | "import random" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "## BFS" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 2, 27 | "metadata": { 28 | "collapsed": true 29 | }, 30 | "outputs": [], 31 | "source": [ 32 | "def BFS(start):\n", 33 | " queue = deque() \n", 34 | " queue.append(start)\n", 35 | " \n", 36 | " visited = [False] * (nodes+1)\n", 37 | " visited[start] = True\n", 38 | " \n", 39 | " while queue:\n", 40 | " u = queue.popleft()\n", 41 | " for v in G.adj[u]:\n", 42 | " if not visited[v]:\n", 43 | " queue.append(v)\n", 44 | " visited[v] = True\n", 45 | " visited[0] = True\n", 46 | " for i in range(nodes+1):\n", 47 | " if visited[i] == False:\n", 48 | " return False\n", 49 | " return True\n", 50 | " " 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": {}, 56 | "source": [ 57 | "## Creating Graph" 58 | ] 59 | }, 60 | { 61 | "cell_type": "code", 62 | "execution_count": 3, 63 | "metadata": { 64 | "collapsed": true 65 | }, 66 | "outputs": [], 67 | "source": [ 68 | "def CreateGraph(node, edge):\n", 69 | " G = nx.Graph()\n", 70 | " \n", 71 | " for i in range(1, node+1):\n", 72 | " G.add_node(i)\n", 73 | " \n", 74 | " for i in range(edge):\n", 75 | " u, v = random.randint(1, node), random.randint(1, node)\n", 76 | " G.add_edge(u, v)\n", 77 | "\n", 78 | " return G\n" 79 | ] 80 | }, 81 | { 82 | "cell_type": "markdown", 83 | "metadata": {}, 84 | "source": [ 85 | "## Drawing Graph" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 4, 91 | "metadata": { 92 | "collapsed": true 93 | }, 94 | "outputs": [], 95 | "source": [ 96 | "def DrawGraph(G, color):\n", 97 | " pos = nx.spring_layout(G)\n", 98 | " nx.draw(G, pos, with_labels = True, node_color = color, edge_color = 'black' ,width = 1, alpha = 0.7) #with_labels=true is to show the node number in the output graph\n" 99 | ] 100 | }, 101 | { 102 | "cell_type": "markdown", 103 | "metadata": {}, 104 | "source": [ 105 | "## Driving Function" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 5, 111 | "metadata": {}, 112 | "outputs": [ 113 | { 114 | "name": "stdout", 115 | "output_type": "stream", 116 | "text": [ 117 | "Node: 8\n", 118 | "Edges: 16\n", 119 | "[1, 2, 3, 4, 5, 6, 7, 8]\n" 120 | ] 121 | }, 122 | { 123 | "data": { 124 | "image/png": "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\nk3VIeTsFNxfbtvWFL3xBn/3sZ9XS1rJmIYnFYnrttdfU2dmp2dlZnThxQk888cRdT0CLxWLq6+vL\nCrNt21lRbmlp2ZDz7tLm2KmMRqO6ePFi5tByf3+/amtrs0a6Xq93Xb42iDC2CJM39U4mkxoeHs46\npDwyMqLa2tqsSVMNDQ2b4gboG+3HL/9Y//jGPypVn7rrkFy5ckWdnZ167bXXdOTIEbW3t+vIkSPr\nNuqybVuBQCDrMPbg4KD8fn/WYey6uro1P9xqaqdyamoq61Kh0dFRNTc3Z4J74MCBNZ1tj+URYWx6\nG3mJQjKZ1NDQUNYId3R0VHv27FkUXBZ9+FNIfnVag0ODOrDvgCrKKxa9ZqWQpFIp/e53v1NHR4dG\nRkZ0/PhxHT9+XFVVVRv1bSzansuXL2eNlicmJtTU1JQ1Yvb5fHe8c7BRO5W2bevatWtZk6imp6cz\nwT18+LCam5uzLvfCxiLC2PRyXaw/L9gd1NW3rioRTijPk6fGTzSqdO/Na0OXu1h/PrgLZylfvXpV\ne/fuzboOt76+nuDmsDAk05PTunHjxpL3nJUWh2RycjIz0aq2tlbt7e16/PHHN+XEqUgksugw9sLZ\n2POHsVdz6mE9dyrT6fSiRTHcbnfW+dylFsWAGUQYm1ooHtLxHx5XZVHlosN1oeGQhs8Oq+npJnlq\nPJqdmZUk5ZfeDGbKSmkqNqWf/sVPNXltMuuQ8nxwF06aqqurI7ircGtILMvSuXfPqfhqseLX4krF\nUiqoLNDeP9urisabo+P4bFxjN8b05MyTGn1vVEePHlV7e7vq6uoMfje3z7ZtjY+PZx3GHhoaUk1N\nTdZlUvv27Vt0c4hcO5Xv/N93sl5jpSztemCX6j6W/XO5dacymUyqp6cnE9y7WRQDZhBhbGovdb+k\nf3jjH7S7ZPeiz1340QX5j/jlv9ef9byVnrujTyQSUSQaUSAWUMNogx4rfyzrkHJ9fT2H4e5QzqUE\nL41q/J1xHfrYIeWX5Ss0GNLAzwbU9nyb3CXuzP1iY46YPl7/cX3vf3xvwyZAbYRUKqWhoaGsME9N\nTam5uTkT5Zr6Gj3T8UzOncp56WRaf/zHP6rlUy0quyd7gYt4Mq5rU9f0V6V/paHuIQ0PD6/pohjY\neJvvuA+wwMDkwNyN5m9hW7YiYxGVhcv0n9/9T80mZpVXk6e8A3maTc+qqKhIHo9HJZ4Sucvc+uTx\nT+rLf/ZlA9/B9hOKh9TZ1ylfsS/r+d17dmssOCYVzt3IvaKpQq4Slwb+OKB4aVxlZWWqr6tXkadI\n/fF+zTpnDX0H68PtdqulpSVrnepwOKze3l719vbq7NmzevXqq+qv6pe/yK8ST4k8JR55ij1yum7+\nPz7VOyV3sVule0uVSCQ0E55ROBxWeCasZDIpeaT+4n49/9nntX///h05GXA7IcLYtOLxuEYnRhWP\nxjURnVAymcw8YqGYbkze0MxvZmQfsuXOdyv6blR5yTx5DnsUj8UVi8UUsANKuBP65/P/rN99+3dy\nOp2LHi6XK+fzK33uTl+zmtdvpve99fmuwS6l7fSikZzL7dIu/y5du3pNpWWlunb5mgJXAmp+vFkt\nLS3Ky7951CFtp9U11LXqm97PH7CzbTvzuPXXC5+zLCvr87leu9J7rNXzJSUleuCBB3T//fcr3B1W\nYDiggtkChaZDun79uuKJuPLz81VUVKSioiIFfx+Uo8qhc+fOybZslZaWqqS0RP5dfhUXF2s8Mq7a\nw7U6cuTIbf6NwmZEhGFEMplUMBjUxMSEAoGAAoGAJiYmsp5LJpMaqRvRROmEKvMrlZ+fL4/HI2+l\nV06/U4myhJqON6mqbW4W7eQ9k7r6m6tqe6Qt62uNzYzp0wc/rb/+wF/LsqxFj3Q6nfPjpR6rec2d\nvu/s7Owdf+2lPrfW31Pfrj5dr7yuK+krcjgccsghOeZGv7ZlayYyIyttyTpnqWBfgSYTk5o8Pyn9\n6cSXLVtxV1xfe+dreiHwwqpCNm/+3KbD4Vj0uJ3nTb3HWwVvado1rSLNLUdaUFiggoICzaZmFY1E\ndeP6DSVHkmr5cIu8td65iV63nM51OV2ajk/f8d89bC5EGGsulUppcnIyK64L/xsIBBSJROTz+eT3\n+1VVVaWqqio1NDTo4YcfzjxXWlqqf7v4b0ueEy4oK1j0D1Qutmw1+Zo4/7tG/vY//lavDr4qb5FX\nsud+vvP/te25+7wOnxlWek9ajf/1T8sZLvhzcsihYDyoj9Z9VF89+tW551YI2fyvt7pvvPkNvdT9\nknZ5duX8/NXfXFWoNaTaptol3yNtpVVWyHnf7YIIr8JmWlLONMuyNDU1tSiqCz+enp5WRUVFJq5+\nv181NTW69957M4GtqKhY1T+qxxqO6ZtvflMpK7Xo8GdVW5XG3h1TeUO5HE6Hxt4ZU0VT9nWqW+Gm\n3ltNWUGZLFmLZv1Kc6PWoZeHZMUt7f/0fjndi18jzQXbV+Lb1quJ5dLkbZJlW0t+PvB+QDUfqFn2\nPWzZaqxcedlObA1EeBkrLSn3zTe/aWyd4vVg27ZCodCyh4inpqZUWlqaiet8aA8cOJD5uLKycs1W\nFyovLFd7S3vO64RrH69VKpbSe//0nhxuh7z7vap9LHsEEYwG9XTr0ztuZ2k9LReSS69cUnwyrv1/\nsXSApZ0bkuV2KsOjYSVnkvLuX3qJSHYqtx8uUVrCZlqneC3Ytq2ZmZmcI9f5j4PBoIqKihYFduGI\n1ufzbfhiCtv9pt5bzVLXbidCCZ373jk53c6soxx1T9ap6tDN1a/mr90++9zZHblztNTiM8O/GJY1\na6nxxNI7J8stPoOtiQjnYHKd4jsVjUaXPUQcCATkdruzgprr4826UMV2vqn3VrTcKmYr2ekhYacS\nCxHhWyz1F2SgY0DTl6ZlzVrK8+Sp5tEa+Y/cXCRiPf+CJBKJnFFd+JxlWYuieuto1uQN4tfCdr2p\n91ZESO4OO5WYR4RvsdQefiwQU0FFgZxup2LBmC7+y0W1/vdWeXbfvNvInezhz87OKhgMLjuKTSQS\nmZnEt84onv/Y4/Fsi9mjK9mON/XeqgjJ3WGnEhIRzrLcOsULxSZjuvjiRdU9USfvgZuTKG4915VO\npzOX6uQK7MTEhCKRiLxe77Kj2LKysh0R2NuxnW7qvZURkrvDTiWI8ALLrVMsScOvDCtwPiArZal4\nV7GaP9WslFJZKzkFE0E9GH1Q3utehUIhlZeX5zwHOz+iraioyHmpB7BVEJK7x07lzkWEF1jpQvp0\nKq2e3h5Fr0UVuxaT56BHBYUFys/Pzzwiiuiphqf0Nx/6G1VWVm7K27IB64GQALePQiwQToRz3ixg\nnsvl0j1771F+Y75GfzUqjzyqPpx97jgQDaiwvFB+v3+JdwG2p/LC8lWvBQ1gDhFeoLSgdNnVbOSQ\nSsvmbhjvsB2K34gveglLygEAVouTkQsstRLQbHRWwe6g0sm0bMtWaCik4MWgyuoWx3anrgQEALh9\nnBNeYKnZ0bPRWfX/tF+x8Zhs21Z+Wb6qH6zWrvuyzx3v9JWAAAC3h8PRCyy1TnFecZ4OPnNwxd/P\nOsUAgNvB4ehbPNv2rBwOh+Kpxed7lxNPxeV0OPVM2zPrtGUAgO2GCN+ixdeiU0dPaSo2teoQz68E\ndPLoSa6DBACsGueEl8BKQACA9UaEl8FKQACA9USEV4GVgAAA64EIAwBgCBOzAAAwhAgDAGAIEQYA\nwBAiDACAIUQYAABDiDAAAIYQYQAADCHCAAAYQoQBADCECAMAYAgRBgDAECIMAIAhRBgAAEOIMAAA\nhhBhAAAMIcIAABhChAEAMIRrytuxAAAAcUlEQVQIAwBgCBEGAMAQIgwAgCFEGAAAQ4gwAACGEGEA\nAAwhwgAAGEKEAQAwhAgDAGAIEQYAwBAiDACAIUQYAABDiDAAAIYQYQAADCHCAAAYQoQBADCECAMA\nYAgRBgDAECIMAIAhRBgAAEOIMAAAhvx/pX86tmKMJE0AAAAASUVORK5CYII=\n", 125 | "text/plain": [ 126 | "" 127 | ] 128 | }, 129 | "metadata": {}, 130 | "output_type": "display_data" 131 | }, 132 | { 133 | "name": "stdout", 134 | "output_type": "stream", 135 | "text": [ 136 | "Node: 8\n", 137 | "Edges: 15\n", 138 | "[1, 2, 3, 4, 5, 6, 7, 8]\n" 139 | ] 140 | }, 141 | { 142 | "data": { 143 | "image/png": "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\n", 144 | "text/plain": [ 145 | "" 146 | ] 147 | }, 148 | "metadata": {}, 149 | "output_type": "display_data" 150 | } 151 | ], 152 | "source": [ 153 | "if __name__ == \"__main__\":\n", 154 | " nodes = int(input(\"Node: \"))\n", 155 | " edges = int(input(\"Edges: \"))\n", 156 | " G = CreateGraph(nodes, edges)\n", 157 | " \n", 158 | " print(G.nodes)\n", 159 | " DrawGraph(G, \"green\")\n", 160 | " plt.show()\n", 161 | " \n", 162 | " while not BFS(1):\n", 163 | " nodes = int(input(\"Node: \"))\n", 164 | " edges = int(input(\"Edges: \"))\n", 165 | " G = CreateGraph(nodes, edges)\n", 166 | "\n", 167 | " print(G.nodes)\n", 168 | " DrawGraph(G, \"green\")\n", 169 | " plt.show()\n", 170 | "\n", 171 | " " 172 | ] 173 | }, 174 | { 175 | "cell_type": "code", 176 | "execution_count": null, 177 | "metadata": { 178 | "collapsed": true 179 | }, 180 | "outputs": [], 181 | "source": [] 182 | } 183 | ], 184 | "metadata": { 185 | "kernelspec": { 186 | "display_name": "Python 3", 187 | "language": "python", 188 | "name": "python3" 189 | }, 190 | "language_info": { 191 | "codemirror_mode": { 192 | "name": "ipython", 193 | "version": 3 194 | }, 195 | "file_extension": ".py", 196 | "mimetype": "text/x-python", 197 | "name": "python", 198 | "nbconvert_exporter": "python", 199 | "pygments_lexer": "ipython3", 200 | "version": "3.6.3" 201 | } 202 | }, 203 | "nbformat": 4, 204 | "nbformat_minor": 2 205 | } 206 | -------------------------------------------------------------------------------- /.ipynb_checkpoints/Maximum Flow-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import networkx as nx\n", 12 | "import matplotlib.pyplot as plt\n", 13 | "from collections import deque\n", 14 | "import random\n" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "## Breadth First Search -- BFS" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": null, 27 | "metadata": { 28 | "collapsed": true 29 | }, 30 | "outputs": [], 31 | "source": [ 32 | "def BFS(start, target, parent, node):\n", 33 | " queue = deque() \n", 34 | " visited = [False for i in range(node+1)]\n", 35 | " start = str(start)\n", 36 | " target = str(target)\n", 37 | " \n", 38 | " queue.append(start)\n", 39 | " visited[int(start)] = True\n", 40 | " \n", 41 | " while queue:\n", 42 | " u = queue.popleft()\n", 43 | " adj = G.adj[u]\n", 44 | " for v, wt in adj.items():\n", 45 | " if not visited[int(v)] and wt['weight']:\n", 46 | " queue.append(v)\n", 47 | " visited[int(v)] = True\n", 48 | " parent[int(v)] = u\n", 49 | " \n", 50 | " return True if visited[int(target)] else False\n", 51 | " \n", 52 | " " 53 | ] 54 | }, 55 | { 56 | "cell_type": "markdown", 57 | "metadata": {}, 58 | "source": [ 59 | "## FordFulkerson Algorithm" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 16, 65 | "metadata": {}, 66 | "outputs": [], 67 | "source": [ 68 | "def FordFulkerson(source, sink, node):\n", 69 | " parent = ['0' for i in range(node+1)]\n", 70 | " max_flow = 0\n", 71 | " \n", 72 | " while BFS(source, sink, parent, node):\n", 73 | " print(\"Parent: \", parent)\n", 74 | " current_flow = 1000000000\n", 75 | " u = sink\n", 76 | " while(u is not source):\n", 77 | " wt = int(G[parent[int(u)]][u]['weight'])\n", 78 | " current_flow = min(current_flow, wt) # G[1][key]['weight']\n", 79 | " u = parent[int(u)]\n", 80 | " max_flow += current_flow\n", 81 | " \n", 82 | " v = sink\n", 83 | " while v is not source:\n", 84 | " p = parent[int(v)]\n", 85 | " p = str(p)\n", 86 | " print(\"P: \", type(p))\n", 87 | " wt = int(G[p][u]['weight'])\n", 88 | " print(wt, type(wt))\n", 89 | " G[int(p)][int(u)]['weight'] = str(wt- current_flow)\n", 90 | " G[int(u)][int(p)]['weight'] = str(wt + current_flow)\n", 91 | " \n", 92 | " return max_flow\n", 93 | " " 94 | ] 95 | }, 96 | { 97 | "cell_type": "markdown", 98 | "metadata": {}, 99 | "source": [ 100 | "## Creating the Graph" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": null, 106 | "metadata": {}, 107 | "outputs": [], 108 | "source": [ 109 | "def CreateGraph():\n", 110 | " G = nx.DiGraph()\n", 111 | " f = open('input.txt')\n", 112 | " n = int(f.readline())\n", 113 | " for i in range(n):\n", 114 | " u, v, w = f.readline().split()\n", 115 | " G.add_edge(u, v, weight = w) \n", 116 | " G.add_edge(v, u, weight = 0)\n", 117 | " return G\n", 118 | "\n", 119 | "'''\n", 120 | "def CreateGraph(node, edge):\n", 121 | " G = nx.DiGraph()\n", 122 | " \n", 123 | " for i in range(1, node+1):\n", 124 | " G.add_node(i)\n", 125 | " for i in range(edge):\n", 126 | " u, v = random.randint(1, node), random.randint(1, node)\n", 127 | " wt = random.randint(1, 10)\n", 128 | " G.add_edge(u, v, weight = wt)\n", 129 | " G.add_edge(v, u, weight = 0)\n", 130 | "\n", 131 | " return G\n", 132 | "\n", 133 | "'''\n", 134 | "\n" 135 | ] 136 | }, 137 | { 138 | "cell_type": "markdown", 139 | "metadata": {}, 140 | "source": [ 141 | "## Drawing Graph" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": null, 147 | "metadata": { 148 | "collapsed": true 149 | }, 150 | "outputs": [], 151 | "source": [ 152 | "def DrawGraph(G, color):\n", 153 | " pos = nx.spring_layout(G)\n", 154 | " nx.draw(G, pos, with_labels = True, node_color = color, edge_color = 'black' ,width = 1, alpha = 0.7) #with_labels=true is to show the node number in the output graph\n" 155 | ] 156 | }, 157 | { 158 | "cell_type": "markdown", 159 | "metadata": {}, 160 | "source": [ 161 | "## Driving Function" 162 | ] 163 | }, 164 | { 165 | "cell_type": "code", 166 | "execution_count": 17, 167 | "metadata": { 168 | "scrolled": false 169 | }, 170 | "outputs": [ 171 | { 172 | "name": "stdout", 173 | "output_type": "stream", 174 | "text": [ 175 | "['0', '1', '3', '5', '4', '2']\n", 176 | "{'1': {'weight': '16'}, '2': {'weight': '13'}}\n", 177 | "1 16 \n", 178 | "16\n", 179 | "2 13 \n", 180 | "13\n", 181 | "Source: 0\n", 182 | "Sink: 5\n", 183 | " 6 \n" 184 | ] 185 | }, 186 | { 187 | "data": { 188 | "image/png": "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\nyuOPP47Bgwfjgw8+EB3FZt24cQPnzp3juWaBWM5EZHcWLFiAPXv2cN52L73zzjtISkpCSEiI6CgO\ni+VMRHYnNTUVer0en332megoNufKlSu4ePEinzwlGMuZiOyOXC7Hc889x3nbvZCeno7p06cjKChI\ndBSHxgvCiMgulZaW4ic/+Qm++OILhIWFiY5jEy5cuIBZs2bh3LlzCAgIEB3HoXHlTER2KSQkBKNG\njcKGDRtER7EZ6enpmDFjBotZAljORGS3Fi9ejH//+9+ct90NX331Fa5fv46VK1eKjkJgORORHZs6\ndSo8PDywa9cu0VEkLz09HTNnzoSPj4/oKASWMxHZudmzZ3P85COcPn0a3377LVfNEsJyJiK7tnjx\nYhQWFuLKlSuio0jWmjVr8Mtf/hJeXl6io1A7ljMR2TW1Wo2nn34aGRkZoqNI0okTJ/Ddd9/hrbfe\nEh2FOmE5E5HdS0tLw7Fjx9DQ0CA6iuT88Y9/xIsvvsg55BLDciYiuzdixAhERkZi06ZNoqNIytGj\nR1FYWIg333xTdBS6D8uZiBzCvHnzsHfvXtExJOVPf/oT5s6dC7VaLToK3YflTEQO4eWXX0Z9fT0+\n//xz0VEk4eDBgygqKsKKFStER6EusJyJyCEolUpMnz6dh7bbrV27FvPmzYObm5voKNQFljMROYy0\ntDRcuHABpaWloqMI9emnn6KsrAxvvPGG6Cj0ACxnInIY4eHh+PGPf+zw87bXrl2LBQsWQKVSiY5C\nD8ByJiKHsmjRIvznP/+ByWQSHUWI/fv3o7KyEsuXLxcdhR6C5UxEDuWZZ56Bi4sLsrKyREcZcCaT\nCevWrcMrr7zCVbPEsZyJyKHI5XKHnbe9b98+1NbWIi0tTXQUegSWMxE5nNdeew15eXm4ceOG6CgD\npmPVvGjRIjg7O4uOQ4/AciYih+Pl5YWJEydi/fr1oqMMmL1796KxsRFLly4VHYW6geVMRA7p17/+\nNY4cOYKmpibRUfqdyWTCX//6V7z22mtQKpWi41A3sJyJyCGNHj0aYWFh2Lx5s+go/S4zMxMtLS1Y\nvHix6CjUTSxnInJY8+bNw+7du0XH6Fcmkwnr16/H0qVLIZfzJ99W8JsiIof1q1/9CrW1tThx4oTo\nKP1m+/btMBqNePXVV0VHoR5gORORw3J2dsa0adPw/vvvi47SL0wmEzIyMrBs2TKumm0Mvy0icmjL\n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\nAABJRU5ErkJggg==\n", 189 | "text/plain": [ 190 | "" 191 | ] 192 | }, 193 | "metadata": {}, 194 | "output_type": "display_data" 195 | }, 196 | { 197 | "name": "stdout", 198 | "output_type": "stream", 199 | "text": [ 200 | "Parent: ['0', '0', '0', '1', '2', '3', '0']\n", 201 | "P: \n" 202 | ] 203 | }, 204 | { 205 | "ename": "KeyError", 206 | "evalue": "'0'", 207 | "output_type": "error", 208 | "traceback": [ 209 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 210 | "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", 211 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 37\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 38\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 39\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mFordFulkerson\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msource\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msink\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnode\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 40\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 41\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", 212 | "\u001b[1;32m\u001b[0m in \u001b[0;36mFordFulkerson\u001b[1;34m(source, sink, node)\u001b[0m\n\u001b[0;32m 18\u001b[0m \u001b[0mp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"P: \"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtype\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 20\u001b[1;33m \u001b[0mwt\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mG\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mu\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'weight'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 21\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mwt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtype\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mwt\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 22\u001b[0m \u001b[0mG\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mu\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'weight'\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mwt\u001b[0m\u001b[1;33m-\u001b[0m \u001b[0mcurrent_flow\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", 213 | "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\networkx\\classes\\coreviews.py\u001b[0m in \u001b[0;36m__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 53\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 54\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m__getitem__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 55\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_atlas\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 56\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 57\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mcopy\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", 214 | "\u001b[1;31mKeyError\u001b[0m: '0'" 215 | ] 216 | } 217 | ], 218 | "source": [ 219 | "if __name__ == \"__main__\":\n", 220 | " \n", 221 | " '''\n", 222 | " print(\"Input node no: \", end = \"\")\n", 223 | " node = int(input())\n", 224 | " print(\"Input edge no: \", end = \"\")\n", 225 | " edge = int(input())\n", 226 | " \n", 227 | " G = CreateGraph(node, edge)\n", 228 | " print(\"Nodes: \", G.nodes)\n", 229 | " \n", 230 | " \n", 231 | " print(G.adj[1])\n", 232 | " x = G.adj[1]\n", 233 | " for key, val in x.items():\n", 234 | " print(key, val['weight'])\n", 235 | " print(G[1][key]['weight'])\n", 236 | " '''\n", 237 | " G = CreateGraph()\n", 238 | " print(G.nodes)\n", 239 | " print(G.adj[str(0)])\n", 240 | " x = G.adj['0']\n", 241 | " for key, val in x.items():\n", 242 | " print(key, val['weight'], type(val['weight']))\n", 243 | " print(G['0'][str(key)]['weight'])\n", 244 | " \n", 245 | " node = len(G.nodes)\n", 246 | " source = input(\"Source: \")\n", 247 | " sink = input(\"Sink: \")\n", 248 | " \n", 249 | " print(type(source), type(sink), node, type(node))\n", 250 | " #print(list(G.edges))\n", 251 | " #print(list(G.adj))\n", 252 | " #print(list(G.degree))\n", 253 | " \n", 254 | " DrawGraph(G, \"yellow\")\n", 255 | " plt.show()\n", 256 | " \n", 257 | " print(FordFulkerson(source, sink, node))\n", 258 | " \n", 259 | " " 260 | ] 261 | }, 262 | { 263 | "cell_type": "markdown", 264 | "metadata": {}, 265 | "source": [] 266 | } 267 | ], 268 | "metadata": { 269 | "kernelspec": { 270 | "display_name": "Python 3", 271 | "language": "python", 272 | "name": "python3" 273 | }, 274 | "language_info": { 275 | "codemirror_mode": { 276 | "name": "ipython", 277 | "version": 3 278 | }, 279 | "file_extension": ".py", 280 | "mimetype": "text/x-python", 281 | "name": "python", 282 | "nbconvert_exporter": "python", 283 | "pygments_lexer": "ipython3", 284 | "version": "3.6.3" 285 | } 286 | }, 287 | "nbformat": 4, 288 | "nbformat_minor": 2 289 | } 290 | -------------------------------------------------------------------------------- /Strongly Connected Component.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import networkx as nx\n", 12 | "import matplotlib.pyplot as plt\n", 13 | "from collections import deque\n", 14 | "import random\n", 15 | "\n" 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "## Depth First Search -- DFS" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": 3, 28 | "metadata": { 29 | "collapsed": true 30 | }, 31 | "outputs": [], 32 | "source": [ 33 | "def PrimaryDFS(u): \n", 34 | " visited[u] = True\n", 35 | " print(u, end = \" \")\n", 36 | " for v in G.adj[u]:\n", 37 | " if not visited[v]:\n", 38 | " PrimaryDFS(v)\n", 39 | " \n", 40 | " stack.append(u)\n", 41 | "\n", 42 | "def SecondaryDFS(u): \n", 43 | " visited[u] = True\n", 44 | " print(u, end = \" \")\n", 45 | " for v in g.adj[u]:\n", 46 | " if not visited[v]:\n", 47 | " SecondaryDFS(v)\n" 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": {}, 53 | "source": [ 54 | "## Creating the Graph" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": 4, 60 | "metadata": { 61 | "collapsed": true 62 | }, 63 | "outputs": [], 64 | "source": [ 65 | "def CreateGraph(node, edge):\n", 66 | " G = nx.DiGraph()\n", 67 | " \n", 68 | " for i in range(1, node+1):\n", 69 | " G.add_node(i)\n", 70 | " \n", 71 | " for i in range(edge):\n", 72 | " u, v = random.randint(1, node), random.randint(1, node)\n", 73 | " G.add_edge(u, v) \n", 74 | " return G" 75 | ] 76 | }, 77 | { 78 | "cell_type": "markdown", 79 | "metadata": {}, 80 | "source": [ 81 | "## Drawing Graph" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": 5, 87 | "metadata": { 88 | "collapsed": true 89 | }, 90 | "outputs": [], 91 | "source": [ 92 | "def DrawGraph(G, color):\n", 93 | " pos = nx.spring_layout(G)\n", 94 | " nx.draw(G, pos, with_labels = True, node_color = color, edge_color = 'black' ,width = 1, alpha = 0.7) #with_labels=true is to show the node number in the output graph\n" 95 | ] 96 | }, 97 | { 98 | "cell_type": "markdown", 99 | "metadata": {}, 100 | "source": [ 101 | "## Driving Function" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 12, 107 | "metadata": { 108 | "scrolled": false 109 | }, 110 | "outputs": [ 111 | { 112 | "name": "stdout", 113 | "output_type": "stream", 114 | "text": [ 115 | "Input node no: 8\n", 116 | "Input edge no: 16\n", 117 | "Nodes: [1, 2, 3, 4, 5, 6, 7, 8]\n" 118 | ] 119 | }, 120 | { 121 | "data": { 122 | "image/png": "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\n9Ho948ePl9WeWiA7O5t58+ZRVVXVLJh/+ctf8rOf/czd5XVoiqKQlZVFeno633zzDcOGDUOn0/HJ\nJ59w6NAh1x7Ut9xyi1w68DASzkJcpca5qKmpqXzzzTddbuOJ1nDs2DHmzZtHZWVls2C+//77ueuu\nu9xdXqdiMpn48ssv+eyzz0h+DVw7AAAgAElEQVRLSyMyMpKoqCi8vb0JCQlhwoQJJCcn06NHD3eX\nKpBwFuKK1dfX88UXX5Camkp9fT1Tpkxh4sSJXWrjidaQk5PDvHnzqKio4OjRo8THxxMVFcW9997L\nPffc4+7yOq1///vfvP/++5SVlVFRUeEa3g4LC0OlUpGUlMTkyZNl1yw3k3AWooXy8vJIS0tjx44d\nDB06FL1ez/XXXy9nyVchNzeXZ5991hXMcXFxREdHM3v2bH7xi1+4u7xO7YsvvuDzzz/n+PHjOBwO\nqqqqKCsro76+nsjISCIjI/Hz88PPz4+xY8ei0+no27ev/J63MwlnIS7BYrG4Np6oqKhg8uTJ6HQ6\nWev4GuTl5TUL5m7duhEdHc3dd9/NvffeKyHQTvLy8khPT2f79u2YTCbMZjNlZWWUl5fj6+tLVFQU\n4eHhqNVqEhIS0Ol0jBs3jqCgoCt4lRogE8gFDEAQkAhMAmSk6VIknIW4gMLCQtLS0ti2bRsDBgxA\nr9fLusat4MSJEzz77LOUl5dz9OhRYmNjiYmJ4a677uK+++6TYHYDq9XKzp07SU9P5+DBgyiKQnV1\nNWVlZRiNRsLDw4mKiiIgIAAvLy9GjRqFTqfjuuuuu8S/Vw6wBtgE2AH12Zvj7E0DTAVmA/3a/k12\nQBLOQpzV0NDArl27SE1NpaioCJ1Ox+TJk4mOjnZ3aZ1Cfn4+c+fOpaKigqysLFcw/+xnP+OBBx6Q\nYPYAp0+fJiMjgy1btlBVVYXVaqW8vJyysjI0Gg1RUVFERESg1WqJjY0lOTmZSZMmnTOStBFYCChA\nBHChLnAbUAGogPnA7W391jocCWfR5RUXF7N582YyMjLo1auXbDzRBk6ePMncuXMpLy9vFsx33nkn\nDz74oASzh7HZbOzZs4fNmzeze/duFEWhtraWsrIyampqCAkJISoqiuDgYFQqlWsP6ptuKkWjeR4I\nB1rSTGYGqoAXkIBuTsJZdEl2u53vv/+e1NRUcnJymDhxIlOmTCE+Pt7dpXU6BQUFzJ07l7KyMo4e\nPUp0dDSxsbHccccdzJkzR4LZw1VUVLBlyxYyMjIoLi7GZrNRUVFBWVkZDofDNSWrZ08LTz11CF/f\nGCIiuuHr60tDg4O33jrJDz/UYjDYiIvz4YEHunPjjaFNXsGM83r0amSI+0cSzqJTUxSl2Yd/eXk5\n6enppKenEx0djV6vZ/To0bLxRBspLCzkmWeeOS+YZ8yYwa9//WsJ5g5EURQOHjzI5s2b2blzJzab\nDZPJRFlZGZWVlTz1lIWJEy2YTM41vYOCggkKimD7djM6XTRRUd7s3l3Diy/m8uabQ4iO9mly9BJg\nOjDPHW/NI0k4i06n6UYTffr04Z577mHv3r2kpqZy+PBhbrvtNvR6vezgc80u3YlbVFTkCuasrCyi\noqLo1q0b06dP5ze/+Y0EcwdmMBjYvn076enp5Ofn4+trYcGCXVRU2LFaFby9vfH29kKlUqFWawgN\nDaV79+74+/vxxz8eYvbsOEaNanqd2oZzeHsz0sXtJBfVRKfRdKOJ4uJiGhoaXGfJwcHBTJ06lccf\nf1wWVrhml+vEfYna2jH87W+5lJXVk5WVRWRkJN26deP222+XYPYwiqJgsVior6+nvr4es9lMXV0d\nZrMZs9nsur/xsaZfh4SEEBMTQ2zsThwOK1arCodDoa6uDqPRgUoFarWGmppqAgL8sVqjOXXKTM+e\n527+osX5u5QJyFrqIOEsOrimG000DrXV1tZSWlpKbW0tYWFhPPLII9x9990SCK3i8p24ZrORsrJ/\nMWeOjb/+1Zuysh7ExcUxdepUfvvb38q/QzvKyclxrWR3brA2fm2xWGjJAKqiKNjtdmw2Gw0NDa6b\nzWbjvvuqUBQVoEJR7DgcDtdzbLYGGhogMDCYl17KZeLESLp3v9DObCogr1Xff0cm4Sw6pKYbTRQV\nFWGz2SgvL6e0tBSVSkV0dDS9e/dGo9FQVlYmgdAqNuKc9nLxTlyz2czRo8cxm9VYrRaefNLKRx9p\niIqawsMPPyz/Du3IarWSk5PDZ5995grUxv9tDFmbzeb62m63Y7c7g7Xp1423xgBXq9Xn3RTFjNVq\nBzRotVo0GlzHANBoVLz55hm0WhW//W3Pi1SsAWrb5WfTEUg4iw6j6UYTO3bswGq1YjQaKS0tpbq6\nmpCQEHr37k1QUBBeXl6MGTMGvV7PwIED3V16J5CD84z5UsFs4ejRo5jNFoxGI97e3lgsXjz8cCkx\nMckSzJfgcDiora2lpqaGqqoqqqurqampwWAwUFtbS21tLSaTCaPRiNFopK6uznVrPBM2m81YLBas\nVitWq9UVjAaDoVmQajSa824+Pj5oNM5gbXrz8vLCy8sLrVaLt7c3arX6gvWHhx8nOPgMDocPDQ1W\nLBYLGo0Xfn7BqNVqPv7YilZrY+HCgWi1Fz6Gc1g7uG1+wB2QhLPweE03msjLy8Nut1NRUUFpaSkO\nh4Po6Gh69uyJVqulW7du6PV6Jk6cSHCw/IfeetbgHMo+P5i//LKCDz4oJC+vgoAAhRkzFPr29cHX\n15fQ0ChiYvxRqdbS2p24NpvtvCHaPn364OXl1aqvcyFms5nKykqqqqqora2lurraFa5GoxGDwYDR\naMRkMrlujddxG2u2WCyuMG1oaECj0eDt7Y2Pjw/e3t74+vri5+eHr68v/v7++Pv7ExAQQGBgILGx\nsQQFBREYGEhwcDDBwcGEhoYSHBxMWFgYYWFhBAYGkpOTw+OPP37Z9+Pt7e1aT7vxdS/0/y/2tZ/f\nJvz9/4bRaCMkJJLY2G6EhISgUsGbb+YDdTz//AC8vS8WzOD8/erTSv9CHZ90awuPdeLECVJTU9m2\nbZurSaW0tJTKykqCg4OJjo4mODgYjUbDyJEj0ev1DB06VM7QWl0NMBkI49y/53/4oYZXX83lpz91\nEBtr4/Rp49nVo/yJjIykd+8+qFQ2FKWK+vrPMJt9LtpcdKnGowt9bbPZzqv07bffplu3bs3uczgc\nVFZWus5Ka2pqXGejFzorra+vP++stGmQWq1WFKWxI9kZpr6+vvj4+DQLtcYgDQwMJCAggJCQEAID\nAwkKCiIkJITQ0FBCQ0NdX7fFdL7a2lp27drVLEwbw97X19d138XOiC8nLy+PlJQU9u//kmXL9hES\n0gs/vx/X3i4ttfCrX+3Hy0uNRvPjf5e//30vxo2LbHIk6dY+l4Sz8ChWq5UdO3aQmppKdna264O1\ntLQUq9VKdHQ0UVFReHl5ER0dzeTJk0lOTiYsLMzdpXc6jV28DQ1r8fZeQUNDhOs6ovM6pZ0FC/IZ\nNMjC9dc7sFisqNUqtFotPj4+BAYGuq5fBgfX88knfdm1q9tlX9NutzdrNrrUtdJzb927dwecv0dm\ns9n13MaamoZp06AKCAggICAAf39/goKCXGeloaGhBAUFuc5IQ0JCCA8Px9fX96oDraNzOBx8++23\npKSkUFxczLRp09DpdAQFvQpsAGKu4qgyz/lcMqwtWsm17T5TVFREWloamZmZmEwm6uvrKS0tpaKi\ngsDAQOLi4ggJCUGtVnPzzTej1+sZPnx4l/2AvBxFUVxnf41Dqo0/16bDrE3va/z/Te9zOBzceedx\nRo06Q01NSbPXcDgUsrNriY1VWL68AZsNkpLU6PUqNBobVVVVOBwKoKDR2HA4jrNnz+nzGo9a2nR0\noWul3t7eza6RPvTQQwwdOrTZ8G5wcLD8nrQCk8lEZmYm69evJywsjJkzZ56zzO1snE2DZlq2dGcj\nM86peLKHd1MSzuIaXX7O68V2n7HZbK6NJg4ePOjaW7a0tBSz2UxUVBSDBw/Gx8eH8PBwdDodOp2O\nqKio9nyDHUJaWhrr169vFriX03RqzIXOQhtvVmsFdXUWjEYbiqKgKM4gramxYzbbOXAAfvlL0Ghg\n7VoH27Y1MGmSA5VKdfYSgwqHA0JDVQQFBZ3XcNS08cjLy6vFQapSqfD39282ZDtlyhT69+9/jT9N\n0dSZM2dYv34927ZtY/jw4TzxxBMMGDDgAt/ZD2c3/wKcl0CudG1tWbqzKQlncQ1auvvMBn6chnN7\ns40mampqmu0j6+fnR0xMDGFhYahUKoYNG4Zer2fEiBGyEcVZiqJgtVqbnRkfPnyYH3744ZIhe24I\nK4pywbNRrVaLWq0+OyVGQ329c2qMoig4HI3P0xIY6INWa2bSJH8SErywWi3o9VoyMsyEhTXf8zcw\n0EJwcA9GjLj+GhuPfvz/Xl5e0l/QRhqX6ly3bh3Z2dlMnjyZv//970RERFzmmY2bVyzEOZp2uV2p\n1MimFxcmn3biKl1+zquTFohBUeoxmR7j888/5KOPjDgcDqqrqyktLcVkMhEVFUVSUhK+vr4EBQWR\nnJzMlClTzmvu6egURWnWcNR0OPli913oMbVa7bpW6u/vz5kzZ6ioqHCFa+OQ78XCV6PRXPAMtXE4\nvLHjuK6ujuxsOzqdmuDgIFcTkUbjPEZ8fBGxsZEkJoai0Wgxm42Eh1cweHB/1OrG11SjVpcxYMDT\nPPCArP7kyaxWK1988QUpKSnY7XZmzpzJk08+iY+Pz+Wf7HI70B/4D87PCTvOBUY0Z79WcH4uTMc5\nlC1nzBciDWHiKuQA9+Gck9g8mE+fNvOHPxxi9OgwHnssEavVSllZGWVlZShKPb6+Np5+Oo69ew34\n+PgQFRVFeHg4arWawYMHo9frGTVqVLtMh7lSdrv9vJBsacA2vfn4+DQL1qZft/S+c38+X375JS+9\n9FKz+3x9fS97XI1GQ0VFBcXFxRQVFXHq1CliYmIYMmQI119/PUOHDiUqyhuVagoX6tb+8MMi9uyp\nYcGC/mg0KhYtyuG664K4777uTb5LOnE9XWVlJZs2bSItLY3+/fszY8YMrr/++lYYmWjsRcnDucBI\nMM7pUi3rRenKJJzFVVjIxboy583LxmJxEBzs4K67vKmurgYUGhoasFishIZa2bkzjM8/v8413WTC\nhAlMmTKFnj0vtnLQtWtoaGjW8NQ0LC/WDHVuuFoslgsGXOP7uNB953YC+/n5odFoWv39GY1GysvL\nm73+hc6MKyoqyMrK4siRIxw+fJjTp0+TmJjIoEGDGDRoEAMHDiQwMPACr3Dhf3ObzcE77xTwxReV\neHmpuPXWcB58sMc581mlE9dT5eTkkJKSwu7duxk7dizTp0+XbVM9hISzuEIXn/O6bVs5mZmFBAbW\nU1xsZfZsP6xW59xQlUqFj48PPj5agoJsrF59L+PH38Gtt956ySGzxuk8LR3uvdh9gCtYr+ZMNSAg\nAF9f3w51jVNRFAoKCjhy5IjrVl9f7wriQYMGkZiY2MJRiouPllya7NXraex2O9988w3r1q2joqLC\nNRUqICDA3aWJJiScxRX6FPgrEOu6x+FwcOLEaZ5++jgPPxzAjh1GSkoauPNOFVqtF97ezg5clUpF\ncHAIMTEO8vNnc+LEDZcN1rq6OrRa7RUPAZ/7WFdoHrJarRw7dsx1ZpyVlUVwcDCDBg1i8ODBJCUl\nER8ffw0/h41cfSeuNPy4m9FoJCMjg/Xr1xMVFcXMmTO55ZZb2mQkR1w7aQgTVygXZ4clKApUVlZQ\nWFjE2rXVDBliQ1FqqKuzYLOpcDi02GwNgOIa2tVoNFgsVszmIxgMfQkICCA8PPyiwerv7y9d2hdR\nW1tLVlYWhw8fJisrixMnTtCrVy+SkpJITk7mT3/6E6Ghoa34itKJ2xGdOnWKlJQUvvzyS26++Wae\neeYZ+vWTUQxPJ5964goZADVGo5GCggKMRiP5+WYOHjTx8MPg5RVIQIAWiwX69u1JTEw0AQGBND9Z\nKycubgijRz/kpvfQ8SiKwpkzZ1xhfOTIEaqqqhg4cCCDBg3i/vvvp3///u2wV7V04nYEiqKwf/9+\n1q1bR05ODnq9njfffJPw8HB3lyZaSIa1xRUxGOZjMPyLoiILdrsdg8HIjh1WvvxSjb+/FpVKjUrl\njY+PLz16+PH660MucJQS4OfAE+1cfcdhs9nIy8tzDU8fPnwYLy+vZteLe/Xq5eaVr6QT19NYLBa2\nb9/OunXr0Gg0zJgxg7Fjx7bJut2ibUk4ixapr6/nk08+4cyZN7njjiwKCxuwWCxnF/8PoKFBTXR0\nFLGx3Vi/voySEiu/+10vQkIu1GxUDDwNyJzXRiaTiezsbFfjVk5ODrGxsc3CWFZGExdTUVHBxo0b\nSU9PZ+DAgcyYMYPrrruu0/dZdGYyrC0uyeFwkJmZyerVq6mqqqKsrJpx44woiobQ0FC0Wi2hoWH0\n6NEDPz/nkKqvrwZvb9VFgtmGcwh0Unu+DY9TXl7erIv6zJkz9O3bl0GDBjFr1iwGDhwo3bPisrKz\ns0lJSWHv3r2MHz+el156qdMt3NNVyZmzuKgDBw7w7rvvcuLECUpKSsjOzkalUrF8eQDjxploaAij\nZ8+eV7hvcteb8+pwOFxTmhqbt6xWK4MGDSIpKck1pUka30RLNK5Jv27dOqqrq5k+fTqTJk2SP+Y6\nGQlncZ5Tp06xcuVKvvvuOwwGA0eOHMFkMtG7d28SEhJIStLy7LNHCQnpjkrldwVH7hpzXi0WS7Mp\nTUePHiU0NNQ1PJ2UlERcXJwMOYorYjAY2Lx5Mxs3biQ2NpaZM2cyYsQI2XGrk5JwFi4Gg4E1a9aw\nadMm6urqOHr0KOXl5cTExDBw4ED8/f356U9/yqxZs/Dz24rMeXWqqalxDU9nZWWRn59PQkJCszAO\nCZEGKXF1CgsLSUlJYceOHYwcOZIZM2bQp08fd5cl2piEs3B5/PHHycrK4vjx4xQWFhISEkJSUhIB\nAQGMGzeOBx544JympJbuStU453UeHT2YFUXh9OnTza4X19TUuKY0DRo0iH79+l3hRgFCNKcoCnv3\n7iUlJYW8vDymTp2KXq9v5XnrwpPJRS7hEhQUxI4dO9BqtQwbNoyIiAiSkpL41a9+dZH9Wzv/nFeb\nzUZubm6z68W+vr6ua8UzZ86kV69eMkQtWoXZbGbr1q2sX78eb29vZsyYwXPPPeeRG8GItiVnzoJv\nv/2Wp556iuLiYhITE1GpVMTExPDQQw8xevToFgZP55jzajKZyMrKcl0vPn78OHFxcc2atyIjI91d\npuhkysrKXFOhhgwZwowZMxg8eLD80deFSTh3YQUFBTz11FN88803/OIXv2DevHmcPn2avXv3MmPG\njE6/cIGiKJSVlTW7XlxcXEz//v1dQ9QDBgzA39/f3aWKTkhRFLKzs1m3bh379+9nwoQJTJs2jdjY\n2Ms/WXR6Es5dUF1dHS+88AJr165lzJgxvPjii8TFxbm7rDbncDjIz89vdr3Ybrc3W+ijd+/eMqVJ\ntCmbzcbXX3/NunXrMBqNTJ8+nYkTJ8ofgaIZCecuxOFw8M477/Dqq68SHx/P8uXLuemmm9xdVpsx\nm80cO3bMFcTZ2dmEh4c3C+PY2FgZOhTtora2lrS0NDZu3Ej37t2ZOXMmN910k0yFEhck4dxFZGRk\nMG/ePOrq6njuuee466673F1Sq6uqqnJdKz5y5AgFBQX06dPHda04KSnpChdMEeLanTx5kpSUFL7+\n+mtGjRrFjBkzSEhIcHdZwsNJOHdy2dnZPPnkkxw6dIjf/OY3PP74451i2FZRFIqKilzXio8cOYLB\nYGgWxP369ev0182FZ1IUhd27d5OSkkJBQQFTp05lypQpMt9dtJiEcydVXV3N3Llz2bRpE1OmTGHp\n0qUderu4hoYGjh8/3qx5y9/fv9kQdY8ePWSIWriV2WwmMzOT9evX4+/vz4wZM7j11ls7xR/Eon1J\nOHcyDoeDFStW8M9//pOBAwfy0ksvkZSU5O6yrpjBYODo0aOuMM7NzaV79+7NVt2KiIhwd5lCAFBa\nWsqGDRvIzMxk6NChzJw5k4EDB8ofi+KqSTh3Ip999hkLFy5Eq9WycOFC9Hq9u0tqEUVRKCkpaXa9\nuKys7LwpTX5+V7KOtxBtS1EUsrKyWLduHQcPHmTSpElMmzaN6Ohod5cmOgEJ507ghx9+4MknnyQ/\nP59HH32U3/3udx7dAWq32zlx4kSzMAaaLfTRu3dvNBqNmysV4nw2m40dO3awbt06zGazayqUr29L\n1pgXomUknDuw0tJSnnzySbZv386sWbN44YUXCAwMdHdZ56mvryc7O9sVxMeOHSMyMpLBgwe7Ajkm\nJkaGAIVHq6mpITU1ldTUVHr27MnMmTO58cYb5fdWtAkJ5w7IbDazdOlSVq9ezU033cTLL79Mr169\n3F2WS2VlZbOFPoqKikhMTHQNUQ8cOJCgoCB3lylEi+Tn55OSksLOnTsZM2YM06dP96j/3kTnJOHc\ngTgcDlavXs2LL75IeHg4y5YtY8yYMW6tSVEUCgsLm4VxXV2da3h60KBBJCYmypQm0aE4HA6+//57\nUlJSOHXqFLfffjuTJ0+WefKi3Ug4dxBfffUVzzzzDBUVFTz11FPcf//9brmubLVaycnJcV0vzsrK\nIigoqFkYd+/eXYb6RIdUV1fnmgoVFBTEHXfcwahRo2QqlGh3Es4e7uTJkzzxxBN8//333H///cyd\nO7fVG08URblomNbW1jYL4ry8PHr27Om6VpyUlNSh508LAVBcXMyGDRvYunUr119/PTNnzmTAgAHy\nR6ZwGwlnD2U0GlmwYAGffvop48aN469//Wur7VZjMplcc4izsrKorKzkrbfeApwfUk2HqCsrK+nf\nv7+reat///7SlSo6BUVROHz4MOvWrePIkSPodDpuv/122RJUeAQJZw/Q9MzV4XDwj3/8g7/97W8k\nJCTw17/+leHDh1/T8cvKysjKyuLw4cMcOXKEkydPoigKiqJQV1eHwWBAp9NRUFCAWq1m8ODBJCUl\nMXjwYHr16iVTmkSnYrVaXVOhGhoamDFjBuPHj5c/OoVHkQspbnbo0CFWrlzJH/7wB7Kzs5k/fz4N\nDQ0sW7aMWbNmXfHxHA4HJ0+ebHb2W15eDjjnFxuNRoxGIwaDAZPJhI+PD4GBgURFRfGnP/2JqKgo\nGcoTnVJVVZVrKlRiYiIPPvggN9xwg/y+C48k4ewmZ86c4V//+hc7d+7EaDSi0+lwOBw88sgjPPbY\nYy1u9rJYLGRnZ7uuCx89epS6ujrAeYZgMBhcYWyxWPD39ycoKIjY2FgCAwNdjS7BwcGyspHolPLy\n8khJSeGbb77htttuY+nSpfTo0cPdZQlxSTKsfU1qgEwgFzAAQUAiMAm48O4zJpOJtWvXsn79eurr\n68nKyqKsrIzo6GjeffddJk2adMlXrK6ubrb5Q25uLna7HXB2mjYGsdFoxG63ExQURFBQEIGBgfj7\n+7tCv1evXs06rKOjo+UMQnQaDoeDb7/9lpSUFIqLi5k2bRo6nU7m14sOQ86cr0oOsAbYBNgB9dmb\n4+ztJWAqMBvoBziHlNPS0vjwww+pra0lNzeXgoICgoKCuOWWWwgMDKSgoKDZqyiKwqlTp5pdLz5z\n5gzg/PAxmUyuIDYajWi1WgIDAwkODiY+Pt51Dc3Ly8u1TnVSUpIsAiI6LZPJ5JoKFRYWxsyZMxk5\ncqRMhRIdjpw5X7GNwEJAASK48N83NqACUKEo89mzJ4aVK1dSWFjImTNnOHbsGBqNhgEDBhAVFUW/\nfv349a9/Tf/+/c/bFrG2thZwbpnY9HpxXV0d/v7+BAYGus6Mvby8AAgKCmq2lWJiYqLrMSE6A4PB\nwIEDBxg9ejQAp0+fZsOGDWzbto3hw4czY8YMBgwY4OYqhbh6Es5XZCMwHwgHLt/ZWVdXTVXVcd55\npwdbtviQlZWF2Wymd+/e9OrVi9DQUMaMGYOfnx9ZWVnk5ORgtVoB5xKdTa8X22w2AgMDm90ah6i7\ndevWLIzj4+NliFp0SkVFRaxfv54tW7ZgtVp59NFH2bVrF9nZ2UyePJmpU6fKVqKiU5BwbrEc4D4g\nmKbBvGJFLvv312I2OwgL82LWrG6MHx9KUdEpysrKUKsbUKsNPPCACqOxG9HR0TQ0NBAdHY1Wq0Wt\nVqMoCiaTqdn1YpVK1ex6sZ+fHyqVCo1GQ58+fZrtaxwWFuauH4oQbU5RFPbt20dKSgp79uzB4XBQ\nUVFBSUkJvXr14plnnmHcuHH4+Pi4u1QhWo2Ec4stBDYAMc3uLSiop1s3H7y81BQUmPjLX/Zz//0a\nunUDg8GIxWImJkbF1q3+vPJKAJGRkcTGxro6qRuHqBunNDUGcuNa1H5+fq6VuGQRENGVWCwWtm3b\nRkpKCoWFhTQ0NFBSUkJZWRkBAQHExsYSExPDv/71L/z9/d1drhCtSrokWqQGZ/PX+cNlPXv6oShQ\nVlbOwYPHMRoN5OUpaLW2s2e6WqqrFSZOtLB2bQyVlSaOHDlCQEAAgYGBxMXFERgY6FroIzIystlZ\ncUJCgkfvzSxEaysvL2fjxo2kpaVhNBoxmUwUFxdTU1NDREQESUlJ+Pr6EhERwbRp0+QSjuiUJJxb\nJBNnV/aFf1x//et+NmwooqFBITYWevXC9YFht9tQFDUajYqRI03s2tUNf39/tFotWq2WhIQEhgwZ\nwrBhwxg8eDBRUVHt97aE8CDZ2dmsW7eOr7/+GrvdTlVVFSUlJVitVmJiYkhISHA1Us6YMUM2pBCd\nmvxmt0guzqlSF/b444MZPLiQwkI4eRK0Wud1MrVajVqtQa1W4XA4iI42Ultbi6IorqHrkpISSkpK\n2Lp1K35+fvj7++Pv709AQMAFv77UYwEBAfJhJToUm83Gzp07SUlJITs7G5vNRnl5OSUlJXh7exMb\nG0toaCgajYYxY8ZIF7boMuSTvEUMXCqcvby0eHt70atXA4cOwZ49cMstzu9XFAcOhwq7XSEkREVD\nQwM1NTWYTCY0Gs1Fb1qt9rz7WjK87e3tfcWhPnToUAl10a4MBgNpaWls3LiRiooKzGYzxcXFVFZW\nEhoaSt++fV2XfqZMmQNx8QsAAAcfSURBVCIbUoguRz6RWyQI5+IiFxcVFUlZWTkajQqzWUN4eAAa\nzY9hGhRkwd8/mn79emK32y94s1qt2Gy2iz6uKEqLg/xi36dWq8+7Rvfxxx9LOIt2UVhYSEpKClu3\nbsVqtVJTU0NJSQkmk4no6Giuu+46vLy86NGjh2tDCunCFl2RfCK3SCIXCueamgb2769lxIhQhgwZ\nyt69VRQVneDRR+MZMCCgWbB6e1cSH38rycn9qaurw2QyUVdX5/rabDZftgqHw3HR4G682Ww2LBbL\nefc1fu1wOFCr1c0Ce+nSpQQEBFzwzPpiZ9uyqElXc+VL1TZSFIU9e/aQkpLCvn37cDgcrqFrlUpF\nTEwM/7+9+3mN4ozjOP6Z/ZHZXXXXhsSlJEUULXhoiEgDUURETaSy8VAs9uxJ8CgED1Kak/gHBKo3\nq7QHT2oRL7lU8OKtUIQWo4Go2RDWtayZ/TXTwzTrZrs/kxifJO8XBCY/2MzuYT7zfJ/n+c6+ffsU\nCAR06NAhnT17VoODgyz0wpbGVqq2ZCWNSvpM1fcz2WxR1679renpRbmup127upRKJTU6WvsAiZKk\njKRHanQhc123Etb1wrv2OJfLaXFxUblcbtmx6zYf4UtaFtq2bWtiYqLu6zf7/4FAoGm5vNm8+NJx\nJBLhAmy8Vq1qg6ptVbvEcRxNTU3p3r17mp2dVaFQUDqdVjqd1o4dO5RMJhWPx2Xbtk6cOKFUKqX+\n/v71fHOAsQjnttXf59yeOUkpSVfX9IxqeZ6nfD5fN1SXvq8O8vfv3yscDuvy5csd/59isdh2kDe6\nqSgUCnXDOxqN/m8k3yzked70x9JZq1q/e94Zzc/P68GDB3r06FGluc7c3FxlK1QymVQkElFPT49S\nqZRGRka0ffv2dXtXwEZAOLetfoew1hz5ZcCfVTuy2OpKpZIWFxebhnqjm4rqv+nq6upoRXu9n4XD\nYUbxy3TWqtbzHDnOK92//7Xu3MlUtkK9efNGxWJRyWRSvb29CgaDOnDggMbGxjQ8PMyNFdAA4dyR\n3yT9IL+83U5AO/LL2T9KOvMRz2vr8jxPjuM0DfJ2yvWe51VG7Csp1y99bY6Ar38jmk7nNTn5Qs+e\n5RQOWzpypFsXLnyhbDajubk3KhTeKRot6cqVfj19mpVt25WtUKFQSEePHtXY2Jj27+cmFWiFBWEd\nWQrYCfnz0K1KfQERzB+XZVmKRqOKRqOreuBBsVhsGeTZbFavX79uGPr5fF6RSKRhkFeHv9l71X+R\nX8pefgM6OflCO3eGdevWoN6+dTQ+/occ55UOHw6qXHaVzxfkeY6OH0/r3buvFIvFFI/HK1uhuru7\nP8m7ATaiT30V2IDOSPpS0q/yR9Jl+fNtwf+OPfkfa0rSeVHK3hjC4bASiYQSieYrj5txXbfhiL36\nOJPJNJ2TD4VCHc+714a+bdsrHMU3blU7N1fQyZMJzc6+1MLCgvr6HM3MlDUwYKlcLsu2u1QqxTUy\nUtTMzF6Njn6nY8eOVfrEA2gfZe1VWdpe8lzSO/llwL1qZ3sJUI/neSoUCnXn3TtZUV8qlToO9Wg0\nqt7e39Xd/ZMs63MFg8FlAf/wYVqPH7/U6dOustm8btzI6dSpoA4ejCkc7pJlWdq5M6G+vpBisQlZ\n1ref8JMENjZGzquSkMQFCGvHsizZti3btldVBl5abNcs1HO5nNLp9LLfDw8/1sDArN6+nVe5XF62\nJ76ry9PLl+81Pp6T51kaGrI1NLRNwWBIvb09lVXY/u6E52v2mQBbEeEMbEKhUKjy+NHOXJU/NdMj\nz5Nc98Oe+OvX/9TJk/0aHHSUyfyju3cLevJkmy5dOqBQqHrVdVB+JQnAShHOAKp8aFVrWaqMmh3H\nUjbr6ty53XJdR8ViUZGIp9u3Z2uCWfLXXsTX+8SBTYUHBQOoUr9VbTweVjJp6+HDtGKxbbLtHZqa\nWtCePbE6r+HJX3sBYKVYEAagSv1WtZL0/HlON2/OaHp6UYGANDAQ18WLu5VIVPdZb92qFkBrhDOA\nGua3qgU2O8raAGp8L3/vfusnpS3nyL+knF/zMwK2GsIZQI398vtqZ9R+QC+1qr0qGu8Aq0dZG0AD\nnTyVKiA/mGlVC6wFwhlAE3+pdavab0SrWmBtEc4A2kCrWmA9Ec4AABiGBWEAABiGcAYAwDCEMwAA\nhiGcAQAwDOEMAIBhCGcAAAxDOAMAYBjCGQAAwxDOAAAYhnAGAMAwhDMAAIYhnAEAMAzhDACAYQhn\nAAAMQzgDAGAYwhkAAMMQzgAAGIZwBgDAMIQzAACGIZwBADAM4QwAgGEIZwAADEM4AwBgGMIZAADD\nEM4AABiGcAYAwDCEMwAAhiGcAQAwDOEMAIBhCGcAAAxDOAMAYBjCGQAAwxDOAAAYhnAGAMAwhDMA\nAIYhnAEAMAzhDACAYQhnAAAM8y9pihNaKV1FtQAAAABJRU5ErkJggg==\n", 123 | "text/plain": [ 124 | "" 125 | ] 126 | }, 127 | "metadata": {}, 128 | "output_type": "display_data" 129 | }, 130 | { 131 | "name": "stdout", 132 | "output_type": "stream", 133 | "text": [ 134 | "Before graph reversing STACK: 1 7 6 3 4 2 8 5 " 135 | ] 136 | }, 137 | { 138 | "data": { 139 | "image/png": "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\nceTIEQoKCigpKQEgICCAU6cCCQgwMAx/rFYbZWWleHh40KOHlVtvDcLb25s2bdrw2WdlZGdbmDKl\nKSUlOezZs5fo6KY0aRKFyaSNJ2qCQlhEpIq2bduGt7c33bt3v+Zzvby8GDJkCCtXruQPf/hDtWtx\nOBx8/fXXbNiwgW+//ZaffvqJ4uJiPDw8CA8P54YbbiAwMBA3NzdKSjwJDNyBj08A2dm5BAQEUFJS\nSnh4EJ6enrRt24awsDB8fDLx8nIjKiqAqKgAysvLOX48k5yc3cTGBhIQ0BtPzyvXJpemXZRERKrA\nMAymTZvG2LFjufXWW6t0jdLSUqZOncpbb71FZGTkNZ1rs9nYunUrGzdu5Ntvv+XgwYP4+vrSuXNn\n7rjjDuLj4zl06BD/+c9/CAoKokuXLnTu3JkuXbrQqlUrTp+eRn7+AnJzTZSUlODn54unpydxca2J\njIy47HuXl6ezbVsYCxe2ZsyYMfTt2/cX09RyLRTCIiKXVfnOQt99F8bcuSt56623qrXCec6cOTgc\nDqZOnXrZ48xmM5s3b+azzz5j586dHDp06Fy49urVi4EDB9KmTZvzKy8spLCwkBYtWpxX47Fjx3jz\nzd+SmLiVnJwKTCZfvLy8aNmyJVFRUVeo2Izz72E+P/xgYcGCBeTn5/PII49w55131vlq74ZOISwi\nUqlL7yxkGA7S0zOBeFq2fIbqbMKQm5vLE088waxZswgICDj3/bKyMjZu3MjmzZvZtWsXR44cITQ0\nlG7dunHXXXcRHx9PbOzlnuWtXFZWFn/605/Izs6madPveOaZMsxmX6KiWtKsWbMrnH1244mf+14b\nhsHu3buZP38+NpuN8ePH07NnT4XxVVIIi4hcZC3OvsoGzu5Q5y+fKSws4vjxI3Tq1PRM2DxPdXpB\n/+Mf/yAiIgI/Pz+2bNnCd999x7Fjx4iMjKRbt27cfffdxMfHX0VIXl5ubi5/+tOfyMzM5MCBA0RE\nRDB4sDu/+U0ekZHhVPZZnWw49z52x7nz08Wf1TAMtm/fzoIFC/D19WXChAl069atWvU2BgphEZHz\nXHlnof379xMZ2YSIiHAqGx3+Un5+Pu7u7gQHn9/esaCggA0bNrBlyxa2b99OamoqN9xwAzfddBO9\ne/cmPj6eJk2a1NinKiws5E9/+hPp6ens37+fkJAQYmJiGDRoEI8+eg9ubh+c+ex2nI04TGf+bOAM\n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\nV16hbdu2PP7443h7e1/VeTabjbVr17J06VJ69+7NmDFjqtW6UqQuKIRFpN7Yvn07//rXvxg3bhwD\nBgy46sePdu7cyezZs4mKimLq1Km0aNGilisVqRkKYRFxObvdzoIFC9iyZQvPPPPMVfdrzsjIICkp\niZMnT5KQkEDPnj3ValIaFN0TFhGXKiws5PXXX8fd3Z1//vOfBAcHX/GckpISFi1axOeff86oUaMY\nNGgQHh7650waHo2ERcRlUlNTmT59Ovfccw+PPPLIFR8/stvtbNiwgUWLFnH77bczbty4qwptkfpK\nISwidc4wDD7++GMWLVrEE088wa233nrFc3bv3s3s2bMJDg4mMTGRVq1a1X6hIrVM8zciUqcqKir4\n97//zZEjR67q8aOsrCySkpI4evQoU6ZM4fbbb9d9X7luaCQsInUmKyuLV155hbi4OH7zm99c9vGj\nsrIyPvjgAz799FOGDRvG0KFDq7Rbkkh9phAWkTrxzTff8PbbbzN27Fji4+MvOZp1OBxs2rSJ+fPn\n0717dyZMmEBYWFgdVytSNxTCIlKrHA4HCxcu5LPPPrvi40c//PADM2fOxNvbm8TExCrtlCTSkOie\nsIjUmqKiImbMmIHD4bjs40c5OTnMnTuX1NRUJk2axF133aX7vtIoaCQsIrXip59+Yvr06fTu3Ztx\n48ZV2r/ZbDazfPly1q1bx9ChQ3nooYeuuk2lyPVAISwiNcowDDZs2MCCBQv47W9/y2233VbpMVu2\nbCE5OZkuXbowadIkIiIiXFCtiGsphEWkxlgsFt555x0OHjzIs88+S/PmzS86JjU1lVmzZuFwOEhM\nTKRjx44uqFSkflAIi0iNOHnyJK+++iotWrTgt7/9LT4+Pue9npeXR3JyMnv27GHChAncc889uu8r\njZ5CWESqbceOHbz55puMHj2awYMHnxeuFouFlStXkpKSQnx8PCNHjrwooEUaK4WwiFSZw+Fg8eLF\nbNy4kaeffvq8qWXDMPjqq6+YO3cubdu2ZcqUKURFRbmwWpH6RyEsItdkx44dbNiwgd/85jf84x//\nwGaz8fTTTxMSEnLumEOHDjFr1izKyspITEyka9euLqxYpP5SCIvIVTnbdGPp0qWUlpZitVqZMmUK\nEyZMOPf4UUFBAfPmzWPHjh088sgj9O/f/4o7I4k0ZmrWISJXdLbpxu7duzl16hQZGRnExcXRrl07\n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\nO/Bu1ENGdbhAAAAAAElFTkSuQmCC\n", 140 | "text/plain": [ 141 | "" 142 | ] 143 | }, 144 | "metadata": {}, 145 | "output_type": "display_data" 146 | }, 147 | { 148 | "name": "stdout", 149 | "output_type": "stream", 150 | "text": [ 151 | "5 \n", 152 | "1 \n", 153 | "7 \n", 154 | "6 2 4 3 8 \n" 155 | ] 156 | } 157 | ], 158 | "source": [ 159 | "if __name__ == \"__main__\":\n", 160 | " \n", 161 | " print(\"Input node no: \", end = \"\")\n", 162 | " node = int(input())\n", 163 | " print(\"Input edge no: \", end = \"\")\n", 164 | " edge = int(input())\n", 165 | " \n", 166 | " G = CreateGraph(node, edge)\n", 167 | " print(\"Nodes: \", G.nodes)\n", 168 | " #print(list(G.edges))\n", 169 | " #print(list(G.adj))\n", 170 | " #print(list(G.degree))\n", 171 | " DrawGraph(G, \"yellow\")\n", 172 | " plt.show()\n", 173 | " \n", 174 | " stack = []\n", 175 | " visited = [False for i in range(node+1)]\n", 176 | " \n", 177 | " print(\"Before graph reversing STACK: \", end = \"\")\n", 178 | " for i in G.nodes:\n", 179 | " if not visited[i]:\n", 180 | " PrimaryDFS(i)\n", 181 | " \n", 182 | " g = G.reverse(copy = True)\n", 183 | " DrawGraph(g, \"yellow\")\n", 184 | " plt.show()\n", 185 | " \n", 186 | " visited = [False for i in range(node+1)]\n", 187 | " \n", 188 | " while stack:\n", 189 | " i = stack.pop()\n", 190 | " if not visited[i]:\n", 191 | " SecondaryDFS(i)\n", 192 | " print (\"\")\n", 193 | " " 194 | ] 195 | }, 196 | { 197 | "cell_type": "code", 198 | "execution_count": null, 199 | "metadata": { 200 | "collapsed": true 201 | }, 202 | "outputs": [], 203 | "source": [] 204 | } 205 | ], 206 | "metadata": { 207 | "kernelspec": { 208 | "display_name": "Python 3", 209 | "language": "python", 210 | "name": "python3" 211 | }, 212 | "language_info": { 213 | "codemirror_mode": { 214 | "name": "ipython", 215 | "version": 3 216 | }, 217 | "file_extension": ".py", 218 | "mimetype": "text/x-python", 219 | "name": "python", 220 | "nbconvert_exporter": "python", 221 | "pygments_lexer": "ipython3", 222 | "version": "3.6.3" 223 | } 224 | }, 225 | "nbformat": 4, 226 | "nbformat_minor": 2 227 | } 228 | --------------------------------------------------------------------------------