{"id":2241,"date":"2024-05-12T18:19:30","date_gmt":"2024-05-12T12:49:30","guid":{"rendered":"https:\/\/moodle.sit.ac.in\/blog\/?p=2241"},"modified":"2024-05-14T20:05:00","modified_gmt":"2024-05-14T14:35:00","slug":"artificial-intelligence-lab-component-bad402","status":"publish","type":"post","link":"https:\/\/moodle.sit.ac.in\/blog\/artificial-intelligence-lab-component-bad402\/","title":{"rendered":"Artificial Intelligence Lab Component (BAD402)"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/AI-Programming.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"469\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/AI-Programming.png?resize=1024%2C469&#038;ssl=1\" alt=\"\" class=\"wp-image-2257 lazyload\" data-srcset=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/AI-Programming.png?resize=1024%2C469&amp;ssl=1 1024w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/AI-Programming.png?resize=300%2C138&amp;ssl=1 300w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/AI-Programming.png?resize=768%2C352&amp;ssl=1 768w, https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/AI-Programming.png?w=1200&amp;ssl=1 1200w\" data-sizes=\"(max-width: 1000px) 100vw, 1000px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/469;\" \/><\/a><\/figure>\n\n\n\n<p>In this blog post, you will find solutions for the <strong>Artificial Intelligence Lab Component (BAD402)<\/strong> course work for the IV semester of <strong>VTU<\/strong> university. To follow along, you will need to have up a machine running any flavour of <strong>GNULinux<\/strong> OS. We recommend using the <strong>Anaconda<\/strong> Python Distribution for this lab. The solutions have been tested on <strong>Ubuntu 22.04 <\/strong>OS. You can find the lab syllabus on the university&#8217;s website or here below.<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/BAD402.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Embed of BAD402.\"><\/object><a id=\"wp-block-file--media-72aa8d2f-1e62-442b-9ccf-bd2dcf3d500f\" href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/BAD402.pdf\">BAD402<\/a><a href=\"https:\/\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/BAD402.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-72aa8d2f-1e62-442b-9ccf-bd2dcf3d500f\">Download<\/a><\/div>\n\n\n\n<p>All these solutions have been maintained at the following git repository shown below. If you want to contribute send me a PR.<\/p>\n\n\n\n<p><a href=\"https:\/\/gitlab.com\/lab_manuals\/current\/iv-semester\/bad402_artificial_intelligence_lab_component\" target=\"_blank\" rel=\"noopener\" title=\"https:\/\/gitlab.com\/labhttps:\/\/gitlab.com\/fsmk\/fsmk-projects\/foss_lab_manuals\/lab_manuals\/iv-semester\/new_scheme\/bcm456c_system_programming_laboratory_manuals\/21csl46pyprlab_vtu\">https:\/\/gitlab.com\/labhttps:\/\/gitlab.com\/fsmk\/fsmk-projects\/foss_lab_manuals\/lab_manuals\/iv-semester\/new_scheme\/bcm456c_system_programming_laboratory_manuals\/21csl46pyprlab_vtu<\/a><\/p>\n\n\n\n<p>To get your Python development environment up and running setup Anaconda Distribution on your system. You can find the detailed procedure here.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Setting up Anaconda Distribution on Ubuntu.<\/h3>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-myblogosphere wp-block-embed-myblogosphere\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"85ybH6A5Rr\"><a href=\"https:\/\/moodle.sit.ac.in\/blog\/setting-up-anaconda-python-programming-environment\/\">Setting up Anaconda Python Programming Environment on Ubuntu<\/a><\/blockquote><iframe class=\"wp-embedded-content lazyload\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;Setting up Anaconda Python Programming Environment on Ubuntu&#8221; &#8212; MyBlogosphere\" data-src=\"https:\/\/moodle.sit.ac.in\/blog\/setting-up-anaconda-python-programming-environment\/embed\/#?secret=Dwd8m5BrPw#?secret=85ybH6A5Rr\" data-secret=\"85ybH6A5Rr\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Setting up Anaconda Distribution on Windows.<\/h3>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-myblogosphere wp-block-embed-myblogosphere\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"3xTAsYAJ2x\"><a href=\"https:\/\/moodle.sit.ac.in\/blog\/a-step-by-step-guide-to-setting-up-anaconda-python-distribution-on-windows\/\">A Step-by-Step Guide to Setting up Anaconda Python Distribution on Windows<\/a><\/blockquote><iframe class=\"wp-embedded-content lazyload\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;A Step-by-Step Guide to Setting up Anaconda Python Distribution on Windows&#8221; &#8212; MyBlogosphere\" data-src=\"https:\/\/moodle.sit.ac.in\/blog\/a-step-by-step-guide-to-setting-up-anaconda-python-distribution-on-windows\/embed\/#?secret=dWzerdrVWP#?secret=3xTAsYAJ2x\" data-secret=\"3xTAsYAJ2x\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>After getting the necessary development environment setup, Now lets focus on the solutions.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"color: #ff0000;\"><a href=\"#P01\" title=\"Question 1\">Question 1<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P02\" title=\"Question 2\">Question 2<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P03\" title=\"Question 3\">Question 3<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P04\" title=\"Question 4\">Question 4<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P05\" title=\"Question 5\">Question 5<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P06\" title=\"Question 6\">Question 6<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P07\" title=\"Question 7\">Question 7<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P06\" title=\"Question 8\">Question 8<\/a><\/span><\/li>\n\n\n\n<li><span style=\"color: #ff0000;\"><a href=\"#P09\" title=\"Question 9\">Question 9<\/a><\/span><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" data-src=\"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2023\/10\/CodingAd.png?ssl=1\" alt=\"\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"P01\">Question 1 <\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Solving Water Jug Problem using DFS<\/h2>\n\n\n\n<p><strong>Implement and Demonstrate Depth First Search Algorithm on Water Jug Problem.<\/strong><\/p>\n\n\n\n<p>The Water Jug Problem is a classic puzzle in which you are given two jugs with specific capacities and a target volume that you need to measure using these jugs. The goal is to determine a sequence of pouring operations that allows you to measure out exactly the desired amount of water using the given jugs. The operations typically involve filling a jug, emptying a jug, or pouring water from one jug into another until you achieve the desired volume.<\/p>\n\n\n\n<p>Let&#8217;s explain the Water Jug Problem using an example:<\/p>\n\n\n\n<p><strong>Problem Setup:<\/strong> Suppose you have two jugs:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jug 1 has a capacity of 4 liters (<code>jug1_capacity = 4<\/code>).<\/li>\n\n\n\n<li>Jug 2 has a capacity of 3 liters (<code>jug2_capacity = 3<\/code>).<\/li>\n<\/ul>\n\n\n\n<p>You want to measure exactly 2 liters of water (<code>target_volume = 2<\/code>) using these jugs.<\/p>\n\n\n\n<p><strong>Operations Allowed:<\/strong> You can perform the following operations:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Fill a Jug:<\/strong> Fill either jug to its maximum capacity from a water source.<\/li>\n\n\n\n<li><strong>Empty a Jug:<\/strong> Empty either jug completely.<\/li>\n\n\n\n<li><strong>Pour Water:<\/strong> Pour water from one jug to another until the pouring jug is either empty or the receiving jug is full.<\/li>\n<\/ol>\n\n\n\n<p><strong>Objective:<\/strong> Find a sequence of operations that allows you to measure out exactly 2 liters of water using the jugs.<\/p>\n\n\n\n<p><strong>DFS Exploration:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Start from <code>(0, 0)<\/code> (both jugs empty).<\/li>\n\n\n\n<li>Try all possible operations recursively, marking visited states to avoid loops:\n<ul class=\"wp-block-list\">\n<li>Fill Jug 1 \u2192 <code>(4, 0)<\/code><\/li>\n\n\n\n<li>Pour Jug 1 to Jug 2 \u2192 <code>(1, 3)<\/code><\/li>\n\n\n\n<li>Empty Jug 2 \u2192 <code>(1, 0)<\/code><\/li>\n\n\n\n<li>Pour Jug 1 to Jug 2 \u2192 <code>(0, 1)<\/code><\/li>\n\n\n\n<li>Fill Jug 1 \u2192 <code>(4, 1)<\/code><\/li>\n\n\n\n<li>Pour Jug 1 to Jug 2 \u2192 <code>(2, 3)<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<p>The DFS algorithm will eventually find a sequence of operations that leads to one of the states having 2 liters in either jug, achieving the target volume.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Python Code<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class WaterJugState:\n    def __init__(self, jug1, jug2):\n        self.jug1 = jug1\n        self.jug2 = jug2\n\n    def __eq__(self, other):\n        return self.jug1 == other.jug1 and self.jug2 == other.jug2\n\n    def __hash__(self):\n        return hash((self.jug1, self.jug2))\n\ndef dfs(current_state, visited, jug1_capacity, jug2_capacity, target_volume):\n    if current_state.jug1 == target_volume or current_state.jug2 == target_volume:\n        if current_state.jug1 == target_volume :\n        \tprint(&quot;Jug 1 now has&quot;, target_volume, &quot;liters.&quot;)\n        else:\n        \tprint(&quot;Jug 2 now has&quot;, target_volume, &quot;liters.&quot;)\n        return True\n    \n    visited.add(current_state)\n\n    # Define all possible operations: (action, from_jug, to_jug)\n    operations = [\n        ('Fill Jug 1', jug1_capacity, current_state.jug2),\n        ('Fill Jug 2', current_state.jug1, jug2_capacity),\n        ('Empty Jug 1', 0, current_state.jug2),\n        ('Empty Jug 2', current_state.jug1, 0),\n        ('Pour Jug 1 to Jug 2', \n            max(0, current_state.jug1 + current_state.jug2 - jug2_capacity), \n            min(jug2_capacity, current_state.jug1 + current_state.jug2)),\n        ('Pour Jug 2 to Jug 1', \n            min(jug1_capacity, current_state.jug1 + current_state.jug2), \n            max(0, current_state.jug1 + current_state.jug2 - jug1_capacity))\n    ]\n\n    for operation in operations:\n        action, new_jug1, new_jug2 = operation\n        new_state = WaterJugState(new_jug1, new_jug2)\n\n        if new_state not in visited:\n            print(f&quot;Trying: {action} =&gt; ({new_jug1}, {new_jug2})&quot;)\n            if dfs(new_state, visited, jug1_capacity, jug2_capacity, target_volume):\n                return True\n#        print(new_jug1, new_jug2)\n    return False\n\ndef solve_water_jug_problem(jug1_capacity, jug2_capacity, target_volume):\n    initial_state = WaterJugState(0, 0)\n    visited = set()\n    \n    if dfs(initial_state, visited, jug1_capacity, jug2_capacity, target_volume):\n        print(&quot;Solution found!&quot;)\n#        print(jug1_capacity, jug2_capacity)\n    else:\n        print(&quot;Solution not possible.&quot;)\n\n# Example usage:\njug1_capacity = int(input(&quot;Enter Jug 1 capacity : &quot;))\njug2_capacity = int(input(&quot;Enter Jug 1 capacity : &quot;))\ntarget_volume = int(input(&quot;Enter Target Volume : &quot;))\n\nprint(f&quot;Solving Water Jug Problem with capacities ({jug1_capacity}, {jug2_capacity}) to measure {target_volume} liters.&quot;)\nsolve_water_jug_problem(jug1_capacity, jug2_capacity, target_volume)\n\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">WaterJugState<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">__init__<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">jug1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">jug2<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.jug1 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> jug1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.jug2 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> jug2<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">__eq__<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">other<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.jug1 <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> other.jug1 <\/span><span style=\"color: #FF79C6\">and<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.jug2 <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> other.jug2<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">__hash__<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">hash<\/span><span style=\"color: #F8F8F2\">((<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.jug1, <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.jug2))<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">dfs<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FFB86C; font-style: italic\">current_state<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">visited<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">jug1_capacity<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">jug2_capacity<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">target_volume<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> current_state.jug1 <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> target_volume <\/span><span style=\"color: #FF79C6\">or<\/span><span style=\"color: #F8F8F2\"> current_state.jug2 <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> target_volume:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> current_state.jug1 <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> target_volume :<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        \t<\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Jug 1 now has<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, target_volume, <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">liters.<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        \t<\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Jug 2 now has<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">, target_volume, <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">liters.<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    visited.add(current_state)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Define all possible operations: (action, from_jug, to_jug)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    operations <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">Fill Jug 1<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">, jug1_capacity, current_state.jug2),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">Fill Jug 2<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">, current_state.jug1, jug2_capacity),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">Empty Jug 1<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, current_state.jug2),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">Empty Jug 2<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">, current_state.jug1, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">Pour Jug 1 to Jug 2<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD\">max<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, current_state.jug1 <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> current_state.jug2 <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> jug2_capacity), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD\">min<\/span><span style=\"color: #F8F8F2\">(jug2_capacity, current_state.jug1 <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> current_state.jug2)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">Pour Jug 2 to Jug 1<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD\">min<\/span><span style=\"color: #F8F8F2\">(jug1_capacity, current_state.jug1 <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> current_state.jug2), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD\">max<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, current_state.jug1 <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> current_state.jug2 <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> jug1_capacity))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    ]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> operation <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> operations:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        action, new_jug1, new_jug2 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> operation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        new_state <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> WaterJugState(new_jug1, new_jug2)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> new_state <\/span><span style=\"color: #FF79C6\">not<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> visited:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F1FA8C\">&quot;Trying: <\/span><span style=\"color: #BD93F9\">{<\/span><span style=\"color: #F8F8F2\">action<\/span><span style=\"color: #BD93F9\">}<\/span><span style=\"color: #F1FA8C\"> =&gt; (<\/span><span style=\"color: #BD93F9\">{<\/span><span style=\"color: #F8F8F2\">new_jug1<\/span><span style=\"color: #BD93F9\">}<\/span><span style=\"color: #F1FA8C\">, <\/span><span style=\"color: #BD93F9\">{<\/span><span style=\"color: #F8F8F2\">new_jug2<\/span><span style=\"color: #BD93F9\">}<\/span><span style=\"color: #F1FA8C\">)&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> dfs(new_state, visited, jug1_capacity, jug2_capacity, target_volume):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">#        print(new_jug1, new_jug2)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">False<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">solve_water_jug_problem<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FFB86C; font-style: italic\">jug1_capacity<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">jug2_capacity<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">target_volume<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    initial_state <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> WaterJugState(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    visited <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">set<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> dfs(initial_state, visited, jug1_capacity, jug2_capacity, target_volume):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Solution found!<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">#        print(jug1_capacity, jug2_capacity)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Solution not possible.<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\"># Example usage:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">jug1_capacity <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">int<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD\">input<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Enter Jug 1 capacity : <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">jug2_capacity <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">int<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD\">input<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Enter Jug 1 capacity : <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">target_volume <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">int<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD\">input<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Enter Target Volume : <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">))<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F1FA8C\">&quot;Solving Water Jug Problem with capacities (<\/span><span style=\"color: #BD93F9\">{<\/span><span style=\"color: #F8F8F2\">jug1_capacity<\/span><span style=\"color: #BD93F9\">}<\/span><span style=\"color: #F1FA8C\">, <\/span><span style=\"color: #BD93F9\">{<\/span><span style=\"color: #F8F8F2\">jug2_capacity<\/span><span style=\"color: #BD93F9\">}<\/span><span style=\"color: #F1FA8C\">) to measure <\/span><span style=\"color: #BD93F9\">{<\/span><span style=\"color: #F8F8F2\">target_volume<\/span><span style=\"color: #BD93F9\">}<\/span><span style=\"color: #F1FA8C\"> liters.&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">solve_water_jug_problem(jug1_capacity, jug2_capacity, target_volume)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 01_DFS_WJP.py \nEnter Jug 1 capacity : 5\nEnter Jug 1 capacity : 4\nEnter Target Volume : 3\nSolving Water Jug Problem with capacities (5, 4) to measure 3 liters.\nTrying: Fill Jug 1 =&gt; (5, 0)\nTrying: Fill Jug 2 =&gt; (5, 4)\nTrying: Empty Jug 1 =&gt; (0, 4)\nTrying: Pour Jug 2 to Jug 1 =&gt; (4, 0)\nTrying: Fill Jug 2 =&gt; (4, 4)\nTrying: Pour Jug 2 to Jug 1 =&gt; (5, 3)\nJug 2 now has 3 liters.\nSolution found!\n\n\n$ python 01_DFS_WJP.py \nEnter Jug 1 capacity : 2\nEnter Jug 1 capacity : 2\nEnter Target Volume : 6\nSolving Water Jug Problem with capacities (2, 2) to measure 6 liters.\nTrying: Fill Jug 1 =&gt; (2, 0)\nTrying: Fill Jug 2 =&gt; (2, 2)\nTrying: Empty Jug 1 =&gt; (0, 2)\nSolution not possible.\n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #E1E4E8\">$ python 01_DFS_WJP.py <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">Enter Jug <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">capacity<\/span><span style=\"color: #E1E4E8\"> : <\/span><span style=\"color: #79B8FF\">5<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">Enter Jug <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">capacity<\/span><span style=\"color: #E1E4E8\"> : <\/span><span style=\"color: #79B8FF\">4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">Enter Target <\/span><span style=\"color: #B392F0\">Volume<\/span><span style=\"color: #E1E4E8\"> : <\/span><span style=\"color: #79B8FF\">3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">Solving Water Jug Problem <\/span><span style=\"color: #F97583\">with<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">capacities<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">5<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">4<\/span><span style=\"color: #E1E4E8\">) to measure <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> liters.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Trying<\/span><span style=\"color: #E1E4E8\">: Fill Jug <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">5<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Trying<\/span><span style=\"color: #E1E4E8\">: Fill Jug <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">5<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">4<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Trying<\/span><span style=\"color: #E1E4E8\">: Empty Jug <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">4<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Trying<\/span><span style=\"color: #E1E4E8\">: Pour Jug <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> to Jug <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">4<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Trying<\/span><span style=\"color: #E1E4E8\">: Fill Jug <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">4<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">4<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Trying<\/span><span style=\"color: #E1E4E8\">: Pour Jug <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> to Jug <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">5<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">Jug <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> now has <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> liters.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">Solution found<\/span><span style=\"color: #F97583\">!<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">$ python 01_DFS_WJP.py <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">Enter Jug <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">capacity<\/span><span style=\"color: #E1E4E8\"> : <\/span><span style=\"color: #79B8FF\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">Enter Jug <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">capacity<\/span><span style=\"color: #E1E4E8\"> : <\/span><span style=\"color: #79B8FF\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">Enter Target <\/span><span style=\"color: #B392F0\">Volume<\/span><span style=\"color: #E1E4E8\"> : <\/span><span style=\"color: #79B8FF\">6<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">Solving Water Jug Problem <\/span><span style=\"color: #F97583\">with<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">capacities<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\">) to measure <\/span><span style=\"color: #79B8FF\">6<\/span><span style=\"color: #E1E4E8\"> liters.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Trying<\/span><span style=\"color: #E1E4E8\">: Fill Jug <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Trying<\/span><span style=\"color: #E1E4E8\">: Fill Jug <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Trying<\/span><span style=\"color: #E1E4E8\">: Empty Jug <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">Solution not possible.<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P02\">Question 2 <\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Solving Missionaries-Cannibals Problem using BFS<\/h2>\n\n\n\n<p><strong>Implement and Demonstrate Best First Search Algorithm on Missionaries-Cannibals Problems using Python<\/strong><\/p>\n\n\n\n<p>The Missionaries and Cannibals Problem is a classic river crossing puzzle that involves transporting missionaries and cannibals from one side of a river to the other using a boat, under certain constraints to ensure the safety of the missionaries.<\/p>\n\n\n\n<p><strong>Problem Description:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Initial State:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Three missionaries (<code>M<\/code>) and three cannibals (<code>C<\/code>) are located on one side of a river.<\/li>\n\n\n\n<li>The boat is also on this side of the river.<\/li>\n\n\n\n<li>The other side of the river is empty.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Goal State:<\/strong>\n<ul class=\"wp-block-list\">\n<li>All missionaries and cannibals successfully transported to the other side of the river.<\/li>\n\n\n\n<li>No missionary is left in the presence of cannibals on either side of the river at any time (to avoid missionaries being eaten).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Constraints:<\/strong>\n<ol class=\"wp-block-list\">\n<li>The boat can carry a maximum of two people (either two missionaries, two cannibals, or one of each).<\/li>\n\n\n\n<li>At no point should there be more cannibals than missionaries on either side of the river (to prevent cannibals from outnumbering and eating the missionaries).<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Objective:<\/strong> Devise a sequence of boat trips to move all missionaries and cannibals from one side of the river to the other, adhering to the above constraints and reaching the goal state.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Code<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"from queue import PriorityQueue\n\n# Define the state class for the Missionaries and Cannibals Problem\nclass State:\n    def __init__(self, left_m, left_c, boat, right_m, right_c):\n        self.left_m = left_m  # Number of missionaries on the left bank\n        self.left_c = left_c  # Number of cannibals on the left bank\n        self.boat = boat      # 1 if boat is on the left bank, 0 if on the right bank\n        self.right_m = right_m  # Number of missionaries on the right bank\n        self.right_c = right_c  # Number of cannibals on the right bank\n    \n    def is_valid(self):\n        # Check if the state is valid (no missionaries eaten on either bank)\n        if self.left_m &lt; 0 or self.left_c &lt; 0 or self.right_m &lt; 0 or self.right_c &lt; 0:\n            return False\n        if self.left_m &gt; 0 and self.left_c &gt; self.left_m:\n            return False\n        if self.right_m &gt; 0 and self.right_c &gt; self.right_m:\n            return False\n        return True\n    \n    def is_goal(self):\n        # Check if the state is the goal state (all missionaries and cannibals on the right bank)\n        return self.left_m == 0 and self.left_c == 0\n    \n    def __lt__(self, other):\n        # Define less-than operator for PriorityQueue comparison (used in Best-First Search)\n        return False\n    \n    def __eq__(self, other):\n        # Define equality operator for comparing states\n        return self.left_m == other.left_m and self.left_c == other.left_c \\\n               and self.boat == other.boat and self.right_m == other.right_m \\\n               and self.right_c == other.right_c\n    \n    def __hash__(self):\n        # Define hash function for storing states in a set\n        return hash((self.left_m, self.left_c, self.boat, self.right_m, self.right_c))\n\ndef successors(state):\n    # Generate all valid successor states from the current state\n    succ_states = []\n    if state.boat == 1:  # Boat is on the left bank\n        for m in range(3):\n            for c in range(3):\n                if 1 &lt;= m + c &lt;= 2:  # Boat capacity is 2\n                    new_state = State(state.left_m - m, state.left_c - c, 0,\n                                      state.right_m + m, state.right_c + c)\n                    if new_state.is_valid():\n                        succ_states.append(new_state)\n    else:  # Boat is on the right bank\n        for m in range(3):\n            for c in range(3):\n                if 1 &lt;= m + c &lt;= 2:  # Boat capacity is 2\n                    new_state = State(state.left_m + m, state.left_c + c, 1,\n                                      state.right_m - m, state.right_c - c)\n                    if new_state.is_valid():\n                        succ_states.append(new_state)\n    return succ_states\n\ndef best_first_search():\n    start_state = State(3, 3, 1, 0, 0)\n    goal_state = State(0, 0, 0, 3, 3)\n    \n    frontier = PriorityQueue()\n    frontier.put((0, start_state))  # Priority queue with (cost, state)\n    came_from = {}\n    cost_so_far = {}\n    came_from[start_state] = None\n    cost_so_far[start_state] = 0\n    \n    while not frontier.empty():\n        current_cost, current_state = frontier.get()\n        \n        if current_state == goal_state:\n            # Reconstruct the path from start_state to goal_state\n            path = []\n            while current_state is not None:\n                path.append(current_state)\n                current_state = came_from[current_state]\n            path.reverse()\n            return path\n        \n        for next_state in successors(current_state):\n            new_cost = cost_so_far[current_state] + 1  # Uniform cost of 1 for each move\n            \n            if next_state not in cost_so_far or new_cost &lt; cost_so_far[next_state]:\n                cost_so_far[next_state] = new_cost\n                priority = new_cost  # Best-First Search uses cost as priority\n                frontier.put((priority, next_state))\n                came_from[next_state] = current_state\n    \n    return None  # No path found\n\ndef print_solution(path):\n    if path is None:\n        print(&quot;No solution found.&quot;)\n    else:\n        print(&quot;Solution found!&quot;)\n        for i, state in enumerate(path):\n            print(f&quot;Step {i}:&quot;)\n            print(f&quot;Left Bank: {state.left_m} missionaries, {state.left_c} cannibals&quot;)\n            print(f&quot;Boat is {'on the left' if state.boat == 1 else 'on the right'} bank&quot;)\n            print(f&quot;Right Bank: {state.right_m} missionaries, {state.right_c} cannibals&quot;)\n            print(&quot;------------&quot;)\n\n# Main function to run the Best-First Search and print the solution\nif __name__ == &quot;__main__&quot;:\n    solution_path = best_first_search()\n    print_solution(solution_path)\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">from<\/span><span style=\"color: #F8F8F2\"> queue <\/span><span style=\"color: #FF79C6\">import<\/span><span style=\"color: #F8F8F2\"> PriorityQueue<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\"># Define the state class for the Missionaries and Cannibals Problem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">State<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">__init__<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">left_m<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">left_c<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">boat<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">right_m<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">right_c<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left_m <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> left_m  <\/span><span style=\"color: #6272A4\"># Number of missionaries on the left bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left_c <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> left_c  <\/span><span style=\"color: #6272A4\"># Number of cannibals on the left bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.boat <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> boat      <\/span><span style=\"color: #6272A4\"># 1 if boat is on the left bank, 0 if on the right bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.right_m <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> right_m  <\/span><span style=\"color: #6272A4\"># Number of missionaries on the right bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.right_c <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> right_c  <\/span><span style=\"color: #6272A4\"># Number of cannibals on the right bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">is_valid<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #6272A4\"># Check if the state is valid (no missionaries eaten on either bank)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left_m <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">or<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left_c <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">or<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.right_m <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">or<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.right_c <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left_m <\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">and<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left_c <\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left_m:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.right_m <\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">and<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.right_c <\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.right_m:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">is_goal<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #6272A4\"># Check if the state is the goal state (all missionaries and cannibals on the right bank)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left_m <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">and<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left_c <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">__lt__<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">other<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #6272A4\"># Define less-than operator for PriorityQueue comparison (used in Best-First Search)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">__eq__<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">other<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #6272A4\"># Define equality operator for comparing states<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left_m <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> other.left_m <\/span><span style=\"color: #FF79C6\">and<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left_c <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> other.left_c \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">               <\/span><span style=\"color: #FF79C6\">and<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.boat <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> other.boat <\/span><span style=\"color: #FF79C6\">and<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.right_m <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> other.right_m \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">               <\/span><span style=\"color: #FF79C6\">and<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.right_c <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> other.right_c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">__hash__<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #6272A4\"># Define hash function for storing states in a set<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">hash<\/span><span style=\"color: #F8F8F2\">((<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left_m, <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left_c, <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.boat, <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.right_m, <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.right_c))<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">successors<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FFB86C; font-style: italic\">state<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #6272A4\"># Generate all valid successor states from the current state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    succ_states <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> state.boat <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">:  <\/span><span style=\"color: #6272A4\"># Boat is on the left bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> m <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">range<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> c <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">range<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&lt;=<\/span><span style=\"color: #F8F8F2\"> m <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> c <\/span><span style=\"color: #FF79C6\">&lt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">:  <\/span><span style=\"color: #6272A4\"># Boat capacity is 2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    new_state <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> State(state.left_m <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> m, state.left_c <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> c, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                                      state.right_m <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> m, state.right_c <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> c)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> new_state.is_valid():<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        succ_states.append(new_state)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\">:  <\/span><span style=\"color: #6272A4\"># Boat is on the right bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> m <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">range<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> c <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">range<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&lt;=<\/span><span style=\"color: #F8F8F2\"> m <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> c <\/span><span style=\"color: #FF79C6\">&lt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">:  <\/span><span style=\"color: #6272A4\"># Boat capacity is 2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    new_state <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> State(state.left_m <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> m, state.left_c <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> c, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                                      state.right_m <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> m, state.right_c <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> c)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> new_state.is_valid():<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        succ_states.append(new_state)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> succ_states<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">best_first_search<\/span><span style=\"color: #F8F8F2\">():<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    start_state <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> State(<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    goal_state <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> State(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    frontier <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> PriorityQueue()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    frontier.put((<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, start_state))  <\/span><span style=\"color: #6272A4\"># Priority queue with (cost, state)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    came_from <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> {}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cost_so_far <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> {}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    came_from[start_state] <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">None<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    cost_so_far[start_state] <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">while<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">not<\/span><span style=\"color: #F8F8F2\"> frontier.empty():<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        current_cost, current_state <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> frontier.get()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> current_state <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> goal_state:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #6272A4\"># Reconstruct the path from start_state to goal_state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            path <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">while<\/span><span style=\"color: #F8F8F2\"> current_state <\/span><span style=\"color: #FF79C6\">is<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">not<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">None<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                path.append(current_state)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                current_state <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> came_from[current_state]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            path.reverse()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> path<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> next_state <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> successors(current_state):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            new_cost <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cost_so_far[current_state] <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">  <\/span><span style=\"color: #6272A4\"># Uniform cost of 1 for each move<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> next_state <\/span><span style=\"color: #FF79C6\">not<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> cost_so_far <\/span><span style=\"color: #FF79C6\">or<\/span><span style=\"color: #F8F8F2\"> new_cost <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> cost_so_far[next_state]:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                cost_so_far[next_state] <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> new_cost<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                priority <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> new_cost  <\/span><span style=\"color: #6272A4\"># Best-First Search uses cost as priority<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                frontier.put((priority, next_state))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                came_from[next_state] <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> current_state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">None<\/span><span style=\"color: #F8F8F2\">  <\/span><span style=\"color: #6272A4\"># No path found<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">print_solution<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FFB86C; font-style: italic\">path<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> path <\/span><span style=\"color: #FF79C6\">is<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">None<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">No solution found.<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">Solution found!<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> i, state <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">enumerate<\/span><span style=\"color: #F8F8F2\">(path):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F1FA8C\">&quot;Step <\/span><span style=\"color: #BD93F9\">{<\/span><span style=\"color: #F8F8F2\">i<\/span><span style=\"color: #BD93F9\">}<\/span><span style=\"color: #F1FA8C\">:&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F1FA8C\">&quot;Left Bank: <\/span><span style=\"color: #BD93F9\">{<\/span><span style=\"color: #F8F8F2\">state.left_m<\/span><span style=\"color: #BD93F9\">}<\/span><span style=\"color: #F1FA8C\"> missionaries, <\/span><span style=\"color: #BD93F9\">{<\/span><span style=\"color: #F8F8F2\">state.left_c<\/span><span style=\"color: #BD93F9\">}<\/span><span style=\"color: #F1FA8C\"> cannibals&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F1FA8C\">&quot;Boat is <\/span><span style=\"color: #BD93F9\">{<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">on the left<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> state.boat <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">on the right<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #BD93F9\">}<\/span><span style=\"color: #F1FA8C\"> bank&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">f<\/span><span style=\"color: #F1FA8C\">&quot;Right Bank: <\/span><span style=\"color: #BD93F9\">{<\/span><span style=\"color: #F8F8F2\">state.right_m<\/span><span style=\"color: #BD93F9\">}<\/span><span style=\"color: #F1FA8C\"> missionaries, <\/span><span style=\"color: #BD93F9\">{<\/span><span style=\"color: #F8F8F2\">state.right_c<\/span><span style=\"color: #BD93F9\">}<\/span><span style=\"color: #F1FA8C\"> cannibals&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD\">print<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">------------<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\"># Main function to run the Best-First Search and print the solution<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">__name__<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">__main__<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    solution_path <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> best_first_search()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    print_solution(solution_path)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"Solution found!\nStep 0:\nLeft Bank: 3 missionaries, 3 cannibals\nBoat is on the left bank\nRight Bank: 0 missionaries, 0 cannibals\n------------\nStep 1:\nLeft Bank: 3 missionaries, 1 cannibals\nBoat is on the right bank\nRight Bank: 0 missionaries, 2 cannibals\n------------\nStep 2:\nLeft Bank: 3 missionaries, 2 cannibals\nBoat is on the left bank\nRight Bank: 0 missionaries, 1 cannibals\n------------\nStep 3:\nLeft Bank: 3 missionaries, 0 cannibals\nBoat is on the right bank\nRight Bank: 0 missionaries, 3 cannibals\n------------\nStep 4:\nLeft Bank: 3 missionaries, 1 cannibals\nBoat is on the left bank\nRight Bank: 0 missionaries, 2 cannibals\n------------\nStep 5:\nLeft Bank: 1 missionaries, 1 cannibals\nBoat is on the right bank\nRight Bank: 2 missionaries, 2 cannibals\n------------\nStep 6:\nLeft Bank: 2 missionaries, 2 cannibals\nBoat is on the left bank\nRight Bank: 1 missionaries, 1 cannibals\n------------\nStep 7:\nLeft Bank: 0 missionaries, 2 cannibals\nBoat is on the right bank\nRight Bank: 3 missionaries, 1 cannibals\n------------\nStep 8:\nLeft Bank: 0 missionaries, 3 cannibals\nBoat is on the left bank\nRight Bank: 3 missionaries, 0 cannibals\n------------\nStep 9:\nLeft Bank: 0 missionaries, 1 cannibals\nBoat is on the right bank\nRight Bank: 3 missionaries, 2 cannibals\n------------\nStep 10:\nLeft Bank: 0 missionaries, 2 cannibals\nBoat is on the left bank\nRight Bank: 3 missionaries, 1 cannibals\n------------\nStep 11:\nLeft Bank: 0 missionaries, 0 cannibals\nBoat is on the right bank\nRight Bank: 3 missionaries, 3 cannibals\n------------\n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">Solution<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">found!<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Step<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #9ECBFF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Boat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">on<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Step<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #9ECBFF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Boat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">on<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Step<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #9ECBFF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Boat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">on<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Step<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #9ECBFF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Boat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">on<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Step<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">4<\/span><span style=\"color: #9ECBFF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Boat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">on<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Step<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">5<\/span><span style=\"color: #9ECBFF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Boat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">on<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Step<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">6<\/span><span style=\"color: #9ECBFF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Boat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">on<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Step<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">7<\/span><span style=\"color: #9ECBFF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Boat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">on<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Step<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">8<\/span><span style=\"color: #9ECBFF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Boat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">on<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Step<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">9<\/span><span style=\"color: #9ECBFF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Boat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">on<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Step<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">10<\/span><span style=\"color: #9ECBFF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Boat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">on<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Step<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">11<\/span><span style=\"color: #9ECBFF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Left<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Boat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">on<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">bank<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Right<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Bank:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">missionaries,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cannibals<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">------------<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P03\">Question 3<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">A* Search algorithm<\/h2>\n\n\n\n<p class=\"has-e-1-e-4-e-8-color has-text-color\"><strong>Implement A* Search algorithm<\/strong><\/p>\n\n\n\n<p>Here&#8217;s a general approach to applying A* search to graphs with more than 4 vertices:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">State Representation:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Define a meaningful representation for the state of the problem. This could be a tuple, a custom class, or any data structure that encapsulates the current state of the problem.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Goal Test:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Implement a function (<code>goal_test(state)<\/code>) that checks whether a given state is the goal state. This function will vary based on the problem you are trying to solve.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Successors Function:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Define a function (<code>successors(state)<\/code>) that generates valid successor states from a given state. Each successor state should be associated with the action taken to reach it and the cost (or distance) associated with that action.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Heuristic Function:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Implement a heuristic function (<code>heuristic(state)<\/code>) that estimates the cost from a given state to the goal state. This function is crucial for guiding the search efficiently towards the goal and can greatly impact the performance of A* search.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Applying A* Search:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Initialize Priority Queue:<\/strong> Use a priority queue (e.g., <code>heapq<\/code>) to manage the frontier of nodes to explore. Nodes are prioritized based on their estimated cost (<code>f = g + h<\/code>), where <code>g<\/code> is the actual cost from the start node and <code>h<\/code> is the heuristic estimate from the node to the goal.<\/li>\n\n\n\n<li><strong>Explore Nodes:<\/strong> Continuously expand nodes from the frontier based on the lowest estimated cost (<code>f<\/code>). Update the cost and heuristic values for each node as necessary.<\/li>\n\n\n\n<li><strong>Goal Check:<\/strong> When expanding a node, check if it represents the goal state (<code>goal_test<\/code>). If so, reconstruct and return the path from the start node to the goal node.<\/li>\n\n\n\n<li><strong>Generate Successors:<\/strong> For each expanded node, generate its successor nodes using the <code>successors<\/code> function. Calculate the total cost to reach each successor and update their heuristic values.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Code<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import heapq\n\nclass Node:\n    def __init__(self, state, parent=None, action=None, cost=0, heuristic=0):\n        self.state = state      # Current state in the search space\n        self.parent = parent    # Parent node\n        self.action = action    # Action that led to this node from the parent node\n        self.cost = cost        # Cost to reach this node from the start node\n        self.heuristic = heuristic  # Heuristic estimate of the cost to reach the goal\n    \n    def __lt__(self, other):\n        return (self.cost + self.heuristic) &lt; (other.cost + other.heuristic)\n\ndef parse_graph_input():\n    graph = {}\n    num_edges = int(input(&quot;Enter the number of edges: &quot;))\n    for _ in range(num_edges):\n        u, v, cost = input(&quot;Enter an edge (format: u v cost): &quot;).split()\n        cost = int(cost)\n        if u not in graph:\n            graph[u] = []\n        if v not in graph:\n            graph[v] = []\n        graph[u].append((v, cost))\n        graph[v].append((u, cost))\n    return graph\n\ndef astar_search(start_state, goal_test, successors, heuristic):\n    # Priority queue to store nodes ordered by f = g + h\n    frontier = []\n    heapq.heappush(frontier, Node(start_state, None, None, 0, heuristic(start_state)))\n    explored = set()\n    \n    while frontier:\n        current_node = heapq.heappop(frontier)\n        current_state = current_node.state\n        \n        if goal_test(current_state):\n            # Reconstruct the path from the goal node to the start node\n            path = []\n            while current_node.parent is not None:\n                path.append((current_node.action, current_node.state))\n                current_node = current_node.parent\n            path.reverse()\n            return path\n        \n        explored.add(current_state)\n        \n        # Generate successors for the current state using the `successors` function\n        for action, successor_state, step_cost in successors(current_state):\n            if successor_state not in explored:\n                new_cost = current_node.cost + step_cost\n                new_node = Node(successor_state, current_node, action, new_cost, heuristic(successor_state))\n                heapq.heappush(frontier, new_node)\n    \n    return None  # No path found\n\nif __name__ == &quot;__main__&quot;:\n    # Get user input to define the graph\n    print(&quot;Define the graph:&quot;)\n    graph = parse_graph_input()\n    \n    start_state = input(&quot;Enter the start state: &quot;)\n    goal_state = input(&quot;Enter the goal state: &quot;)\n    \n    def goal_test(state):\n        return state == goal_state\n    \n    def successors(state):\n        # Generate successor states from the current state based on the graph\n        successors_list = []\n        for neighbor, cost in graph.get(state, []):\n            action = f&quot;Move to {neighbor}&quot;  # Default action (e.g., &quot;Move to B&quot;)\n            successor_state = neighbor\n            step_cost = cost\n            successors_list.append((action, successor_state, step_cost))\n        return successors_list\n    \n    def heuristic(state):\n        # Define a simple heuristic function (e.g., straight-line distance)\n        heuristic_values = {key: abs(ord(key) - ord(goal_state)) for key in graph.keys()}\n        return heuristic_values.get(state, float('inf'))  # Default to infinity if state not found\n    \n    # Perform A* search using custom successors function\n    path = astar_search(start_state, goal_test, successors, heuristic)\n    \n    # Print the resulting path found by A* search\n    if path:\n        print(&quot;Path found:&quot;)\n        for action, state in path:\n            print(f&quot;Action: {action}, State: {state}&quot;)\n    else:\n        print(&quot;No path found.&quot;)\n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> heapq<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">Node<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__init__<\/span><span style=\"color: #E1E4E8\">(self, state, parent<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">, action<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">, cost<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">, heuristic<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.state <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> state      <\/span><span style=\"color: #6A737D\"># Current state in the search space<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.parent <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> parent    <\/span><span style=\"color: #6A737D\"># Parent node<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.action <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> action    <\/span><span style=\"color: #6A737D\"># Action that led to this node from the parent node<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.cost <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> cost        <\/span><span style=\"color: #6A737D\"># Cost to reach this node from the start node<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.heuristic <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> heuristic  <\/span><span style=\"color: #6A737D\"># Heuristic estimate of the cost to reach the goal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__lt__<\/span><span style=\"color: #E1E4E8\">(self, other):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.cost <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.heuristic) <\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #E1E4E8\"> (other.cost <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> other.heuristic)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">parse_graph_input<\/span><span style=\"color: #E1E4E8\">():<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    graph <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> {}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    num_edges <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">input<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Enter the number of edges: &quot;<\/span><span style=\"color: #E1E4E8\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> _ <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(num_edges):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        u, v, cost <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">input<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Enter an edge (format: u v cost): &quot;<\/span><span style=\"color: #E1E4E8\">).split()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        cost <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">(cost)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> u <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> graph:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            graph[u] <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> v <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> graph:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            graph[v] <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        graph[u].append((v, cost))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        graph[v].append((u, cost))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> graph<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">astar_search<\/span><span style=\"color: #E1E4E8\">(start_state, goal_test, successors, heuristic):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Priority queue to store nodes ordered by f = g + h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    frontier <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    heapq.heappush(frontier, Node(start_state, <\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">, heuristic(start_state)))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    explored <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">set<\/span><span style=\"color: #E1E4E8\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> frontier:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        current_node <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> heapq.heappop(frontier)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        current_state <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> current_node.state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> goal_test(current_state):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #6A737D\"># Reconstruct the path from the goal node to the start node<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            path <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> current_node.parent <\/span><span style=\"color: #F97583\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                path.append((current_node.action, current_node.state))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                current_node <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> current_node.parent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            path.reverse()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> path<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        explored.add(current_state)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #6A737D\"># Generate successors for the current state using the `successors` function<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> action, successor_state, step_cost <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> successors(current_state):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> successor_state <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> explored:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                new_cost <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> current_node.cost <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> step_cost<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                new_node <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> Node(successor_state, current_node, action, new_cost, heuristic(successor_state))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                heapq.heappush(frontier, new_node)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #6A737D\"># No path found<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__name__<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;__main__&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Get user input to define the graph<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Define the graph:&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    graph <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> parse_graph_input()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    start_state <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">input<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Enter the start state: &quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    goal_state <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">input<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Enter the goal state: &quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">goal_test<\/span><span style=\"color: #E1E4E8\">(state):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> state <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> goal_state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">successors<\/span><span style=\"color: #E1E4E8\">(state):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #6A737D\"># Generate successor states from the current state based on the graph<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        successors_list <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> neighbor, cost <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> graph.get(state, []):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            action <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">f<\/span><span style=\"color: #9ECBFF\">&quot;Move to <\/span><span style=\"color: #79B8FF\">{<\/span><span style=\"color: #E1E4E8\">neighbor<\/span><span style=\"color: #79B8FF\">}<\/span><span style=\"color: #9ECBFF\">&quot;<\/span><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #6A737D\"># Default action (e.g., &quot;Move to B&quot;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            successor_state <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> neighbor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            step_cost <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> cost<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            successors_list.append((action, successor_state, step_cost))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> successors_list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">heuristic<\/span><span style=\"color: #E1E4E8\">(state):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #6A737D\"># Define a simple heuristic function (e.g., straight-line distance)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        heuristic_values <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> {key: <\/span><span style=\"color: #79B8FF\">abs<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">ord<\/span><span style=\"color: #E1E4E8\">(key) <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">ord<\/span><span style=\"color: #E1E4E8\">(goal_state)) <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> key <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> graph.keys()}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> heuristic_values.get(state, <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&#39;inf&#39;<\/span><span style=\"color: #E1E4E8\">))  <\/span><span style=\"color: #6A737D\"># Default to infinity if state not found<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Perform A* search using custom successors function<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    path <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> astar_search(start_state, goal_test, successors, heuristic)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Print the resulting path found by A* search<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> path:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Path found:&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> action, state <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> path:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #F97583\">f<\/span><span style=\"color: #9ECBFF\">&quot;Action: <\/span><span style=\"color: #79B8FF\">{<\/span><span style=\"color: #E1E4E8\">action<\/span><span style=\"color: #79B8FF\">}<\/span><span style=\"color: #9ECBFF\">, State: <\/span><span style=\"color: #79B8FF\">{<\/span><span style=\"color: #E1E4E8\">state<\/span><span style=\"color: #79B8FF\">}<\/span><span style=\"color: #9ECBFF\">&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;No path found.&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 03Astar_search.py \nDefine the graph:\nEnter the number of edges: 7\nEnter an edge (format: u v cost): A B 1\t     \nEnter an edge (format: u v cost): A C 3\nEnter an edge (format: u v cost): B C 1\nEnter an edge (format: u v cost): B D 2\nEnter an edge (format: u v cost): C D 1\nEnter an edge (format: u v cost): D E 4\nEnter an edge (format: u v cost): E G 3\nEnter the start state: A\nEnter the goal state: G\nPath found:\nAction: Move to B, State: B\nAction: Move to D, State: D\nAction: Move to E, State: E\nAction: Move to G, State: G\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">python<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">03<\/span><span style=\"color: #9ECBFF\">Astar_search.py<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Define<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">graph:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">number<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">of<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edges:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">7<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): A B 1\t     <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): A C 3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): B C 1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): B D 2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): C D 1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): D E 4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): E G 3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">start<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">state:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">A<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">goal<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">state:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">G<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Path<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">found:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Action:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Move<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">to<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">B,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">State:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">B<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Action:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Move<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">to<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">D,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">State:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">D<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Action:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Move<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">to<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">E,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">State:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">E<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Action:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Move<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">to<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">G,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">State:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">G<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P04\">Question 4<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">AO* Search algorithm<\/h2>\n\n\n\n<p class=\"has-e-1-e-4-e-8-color has-text-color\"><strong>Implement AO* Search algorithm<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Code<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import heapq\n\nclass Node:\n    def __init__(self, state, parent=None, action=None, cost=0, heuristic=0):\n        self.state = state      # Current state in the search space\n        self.parent = parent    # Parent node\n        self.action = action    # Action that led to this node from the parent node\n        self.cost = cost        # Cost to reach this node from the start node\n        self.heuristic = heuristic  # Heuristic estimate of the cost to reach the goal\n    \n    def __lt__(self, other):\n        return (self.cost + self.heuristic) &lt; (other.cost + other.heuristic)\n\ndef parse_graph_input():\n    graph = {}\n    num_edges = int(input(&quot;Enter the number of edges: &quot;))\n    for _ in range(num_edges):\n        u, v, cost = input(&quot;Enter an edge (format: u v cost): &quot;).split()\n        cost = float(cost)\n        if u not in graph:\n            graph[u] = []\n        if v not in graph:\n            graph[v] = []\n        graph[u].append((v, cost))\n    return graph\n\ndef ao_star_search(start_state, goal_state, graph):\n    frontier = []\n    heapq.heappush(frontier, Node(start_state, None, None, 0, heuristic(start_state, goal_state)))\n    explored = {}\n    \n    while frontier:\n        current_node = heapq.heappop(frontier)\n        current_state = current_node.state\n        \n        if current_state == goal_state:\n            # Reconstruct the path from the goal node to the start node\n            path = []\n            while current_node.parent is not None:\n                path.append((current_node.action, current_node.state))\n                current_node = current_node.parent\n            path.reverse()\n            return path\n        \n        if current_state not in explored or current_node.cost &lt; explored[current_state]:\n            explored[current_state] = current_node.cost\n            \n            for neighbor, step_cost in graph.get(current_state, []):\n                new_cost = current_node.cost + step_cost\n                new_node = Node(neighbor, current_node, f&quot;Move to {neighbor}&quot;, new_cost, heuristic(neighbor, goal_state))\n                heapq.heappush(frontier, new_node)\n    \n    return None  # No path found\n\ndef heuristic(state, goal_state):\n    # Simple heuristic function (e.g., straight-line distance)\n    heuristic_values = {'A': 5, 'B': 3, 'C': 2, 'D': 1, 'E': 2, 'G': 0}  # Custom heuristic values based on problem domain\n    return heuristic_values.get(state, float('inf'))  # Default to infinity if state not found\n\nif __name__ == &quot;__main__&quot;:\n    # Get user input to define the graph\n    print(&quot;Define the graph:&quot;)\n    graph = parse_graph_input()\n    \n    start_state = input(&quot;Enter the start state: &quot;)\n    goal_state = input(&quot;Enter the goal state: &quot;)\n    \n    # Perform AO* search using the defined graph, start state, and goal state\n    path = ao_star_search(start_state, goal_state, graph)\n    \n    # Print the resulting path found by AO* search\n    if path:\n        print(&quot;Path found:&quot;)\n        for action, state in path:\n            print(f&quot;Action: {action}, State: {state}&quot;)\n    else:\n        print(&quot;No path found.&quot;)\n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> heapq<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">Node<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__init__<\/span><span style=\"color: #E1E4E8\">(self, state, parent<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">, action<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">, cost<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">, heuristic<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.state <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> state      <\/span><span style=\"color: #6A737D\"># Current state in the search space<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.parent <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> parent    <\/span><span style=\"color: #6A737D\"># Parent node<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.action <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> action    <\/span><span style=\"color: #6A737D\"># Action that led to this node from the parent node<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.cost <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> cost        <\/span><span style=\"color: #6A737D\"># Cost to reach this node from the start node<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.heuristic <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> heuristic  <\/span><span style=\"color: #6A737D\"># Heuristic estimate of the cost to reach the goal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__lt__<\/span><span style=\"color: #E1E4E8\">(self, other):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.cost <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.heuristic) <\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #E1E4E8\"> (other.cost <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> other.heuristic)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">parse_graph_input<\/span><span style=\"color: #E1E4E8\">():<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    graph <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> {}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    num_edges <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">input<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Enter the number of edges: &quot;<\/span><span style=\"color: #E1E4E8\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> _ <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(num_edges):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        u, v, cost <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">input<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Enter an edge (format: u v cost): &quot;<\/span><span style=\"color: #E1E4E8\">).split()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        cost <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\">(cost)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> u <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> graph:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            graph[u] <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> v <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> graph:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            graph[v] <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        graph[u].append((v, cost))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> graph<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">ao_star_search<\/span><span style=\"color: #E1E4E8\">(start_state, goal_state, graph):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    frontier <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    heapq.heappush(frontier, Node(start_state, <\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">, heuristic(start_state, goal_state)))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    explored <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> {}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> frontier:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        current_node <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> heapq.heappop(frontier)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        current_state <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> current_node.state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> current_state <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> goal_state:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #6A737D\"># Reconstruct the path from the goal node to the start node<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            path <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> current_node.parent <\/span><span style=\"color: #F97583\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                path.append((current_node.action, current_node.state))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                current_node <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> current_node.parent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            path.reverse()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> path<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> current_state <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> explored <\/span><span style=\"color: #F97583\">or<\/span><span style=\"color: #E1E4E8\"> current_node.cost <\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #E1E4E8\"> explored[current_state]:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            explored[current_state] <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> current_node.cost<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> neighbor, step_cost <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> graph.get(current_state, []):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                new_cost <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> current_node.cost <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> step_cost<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                new_node <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> Node(neighbor, current_node, <\/span><span style=\"color: #F97583\">f<\/span><span style=\"color: #9ECBFF\">&quot;Move to <\/span><span style=\"color: #79B8FF\">{<\/span><span style=\"color: #E1E4E8\">neighbor<\/span><span style=\"color: #79B8FF\">}<\/span><span style=\"color: #9ECBFF\">&quot;<\/span><span style=\"color: #E1E4E8\">, new_cost, heuristic(neighbor, goal_state))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                heapq.heappush(frontier, new_node)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #6A737D\"># No path found<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">heuristic<\/span><span style=\"color: #E1E4E8\">(state, goal_state):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Simple heuristic function (e.g., straight-line distance)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    heuristic_values <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> {<\/span><span style=\"color: #9ECBFF\">&#39;A&#39;<\/span><span style=\"color: #E1E4E8\">: <\/span><span style=\"color: #79B8FF\">5<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #9ECBFF\">&#39;B&#39;<\/span><span style=\"color: #E1E4E8\">: <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #9ECBFF\">&#39;C&#39;<\/span><span style=\"color: #E1E4E8\">: <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #9ECBFF\">&#39;D&#39;<\/span><span style=\"color: #E1E4E8\">: <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #9ECBFF\">&#39;E&#39;<\/span><span style=\"color: #E1E4E8\">: <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #9ECBFF\">&#39;G&#39;<\/span><span style=\"color: #E1E4E8\">: <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">}  <\/span><span style=\"color: #6A737D\"># Custom heuristic values based on problem domain<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> heuristic_values.get(state, <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&#39;inf&#39;<\/span><span style=\"color: #E1E4E8\">))  <\/span><span style=\"color: #6A737D\"># Default to infinity if state not found<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__name__<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;__main__&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Get user input to define the graph<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Define the graph:&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    graph <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> parse_graph_input()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    start_state <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">input<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Enter the start state: &quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    goal_state <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">input<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Enter the goal state: &quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Perform AO* search using the defined graph, start state, and goal state<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    path <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> ao_star_search(start_state, goal_state, graph)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Print the resulting path found by AO* search<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> path:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Path found:&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> action, state <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> path:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #F97583\">f<\/span><span style=\"color: #9ECBFF\">&quot;Action: <\/span><span style=\"color: #79B8FF\">{<\/span><span style=\"color: #E1E4E8\">action<\/span><span style=\"color: #79B8FF\">}<\/span><span style=\"color: #9ECBFF\">, State: <\/span><span style=\"color: #79B8FF\">{<\/span><span style=\"color: #E1E4E8\">state<\/span><span style=\"color: #79B8FF\">}<\/span><span style=\"color: #9ECBFF\">&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;No path found.&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 04AOstar_search.py \nDefine the graph:\nEnter the number of edges: 8\nEnter an edge (format: u v cost): S A 3\nEnter an edge (format: u v cost): S B 2\nEnter an edge (format: u v cost): A C 4\nEnter an edge (format: u v cost): A D 2\nEnter an edge (format: u v cost): B E 3\nEnter an edge (format: u v cost): C G 2\nEnter an edge (format: u v cost): D G 5\nEnter an edge (format: u v cost): E G 4\nEnter the start state: S\nEnter the goal state: G\nPath found:\nAction: Move to B, State: B\nAction: Move to E, State: E\nAction: Move to G, State: G\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">python<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">04<\/span><span style=\"color: #9ECBFF\">AOstar_search.py<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Define<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">graph:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">number<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">of<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edges:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">8<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): S A 3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): S B 2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): A C 4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): A D 2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): B E 3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): C G 2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): D G 5<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">an<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">edge<\/span><span style=\"color: #E1E4E8\"> (format: <\/span><span style=\"color: #9ECBFF\">u<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">v<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cost<\/span><span style=\"color: #E1E4E8\">): E G 4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">start<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">state:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">S<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">goal<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">state:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">G<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Path<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">found:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Action:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Move<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">to<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">B,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">State:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">B<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Action:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Move<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">to<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">E,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">State:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">E<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Action:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Move<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">to<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">G,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">State:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">G<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P05\">Question 5<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\"><strong>8-Queens Problem<\/strong><\/h2>\n\n\n\n<p class=\"has-e-1-e-4-e-8-color has-text-color\"><strong>Solve 8-Queens Problem with suitable assumptions<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Code for first solution<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"def is_safe(board, row, col):\n    &quot;&quot;&quot; Check if it's safe to place a queen at board[row][col] &quot;&quot;&quot;\n    # Check column\n    for i in range(row):\n        if board[i][col] == 1:\n            return False\n    \n    # Check upper diagonal on left side\n    i, j = row, col\n    while i &gt;= 0 and j &gt;= 0:\n        if board[i][j] == 1:\n            return False\n        i -= 1\n        j -= 1\n    \n    # Check upper diagonal on right side\n    i, j = row, col\n    while i &gt;= 0 and j &lt; len(board):\n        if board[i][j] == 1:\n            return False\n        i -= 1\n        j += 1\n    \n    return True\n\ndef solve_queens(board, row):\n    &quot;&quot;&quot; Recursively solve the 8-Queens Problem using backtracking &quot;&quot;&quot;\n    n = len(board)\n    \n    # Base case: If all queens are placed, return True\n    if row &gt;= n:\n        return True\n    \n    for col in range(n):\n        if is_safe(board, row, col):\n            board[row][col] = 1  # Place the queen\n            \n            # Recur to place the rest of the queens\n            if solve_queens(board, row + 1):\n                return True\n            \n            # If placing queen at board[row][col] doesn't lead to a solution, backtrack\n            board[row][col] = 0  # Backtrack\n    \n    return False\n\ndef print_board(board):\n    &quot;&quot;&quot; Print the board configuration &quot;&quot;&quot;\n    n = len(board)\n    for i in range(n):\n        for j in range(n):\n            print(board[i][j], end=&quot; &quot;)\n        print()\n\ndef solve_8queens():\n    &quot;&quot;&quot; Solve the 8-Queens Problem and print the solution &quot;&quot;&quot;\n    n = 8  # Size of the chessboard (8x8)\n    board = [[0] * n for _ in range(n)]  # Initialize empty board\n    \n    if solve_queens(board, 0):\n        print(&quot;Solution found:&quot;)\n        print_board(board)\n    else:\n        print(&quot;No solution exists.&quot;)\n\n# Call the function to solve the 8-Queens Problem\nsolve_8queens()\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">is_safe<\/span><span style=\"color: #E1E4E8\">(board, row, col):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Check if it&#39;s safe to place a queen at board[row][col] &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Check column<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(row):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> board[i][col] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Check upper diagonal on left side<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    i, j <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> row, col<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">&gt;=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">and<\/span><span style=\"color: #E1E4E8\"> j <\/span><span style=\"color: #F97583\">&gt;=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> board[i][j] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        i <\/span><span style=\"color: #F97583\">-=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        j <\/span><span style=\"color: #F97583\">-=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Check upper diagonal on right side<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    i, j <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> row, col<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">&gt;=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">and<\/span><span style=\"color: #E1E4E8\"> j <\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">len<\/span><span style=\"color: #E1E4E8\">(board):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> board[i][j] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        i <\/span><span style=\"color: #F97583\">-=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        j <\/span><span style=\"color: #F97583\">+=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">solve_queens<\/span><span style=\"color: #E1E4E8\">(board, row):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Recursively solve the 8-Queens Problem using backtracking &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    n <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">len<\/span><span style=\"color: #E1E4E8\">(board)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Base case: If all queens are placed, return True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> row <\/span><span style=\"color: #F97583\">&gt;=<\/span><span style=\"color: #E1E4E8\"> n:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> col <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> is_safe(board, row, col):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            board[row][col] <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #6A737D\"># Place the queen<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #6A737D\"># Recur to place the rest of the queens<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> solve_queens(board, row <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #6A737D\"># If placing queen at board[row][col] doesn&#39;t lead to a solution, backtrack<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            board[row][col] <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #6A737D\"># Backtrack<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">False<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">print_board<\/span><span style=\"color: #E1E4E8\">(board):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Print the board configuration &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    n <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">len<\/span><span style=\"color: #E1E4E8\">(board)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> j <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(board[i][j], <\/span><span style=\"color: #FFAB70\">end<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #9ECBFF\">&quot; &quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">solve_8queens<\/span><span style=\"color: #E1E4E8\">():<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Solve the 8-Queens Problem and print the solution &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    n <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">8<\/span><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #6A737D\"># Size of the chessboard (8x8)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    board <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> [[<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">] <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #E1E4E8\"> n <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> _ <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(n)]  <\/span><span style=\"color: #6A737D\"># Initialize empty board<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> solve_queens(board, <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Solution found:&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        print_board(board)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;No solution exists.&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># Call the function to solve the 8-Queens Problem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">solve_8queens()<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 05NQueens.py \n\nSolution found:\n1 0 0 0 0 0 0 0 \n0 0 0 0 1 0 0 0 \n0 0 0 0 0 0 0 1 \n0 0 0 0 0 1 0 0 \n0 0 1 0 0 0 0 0 \n0 0 0 0 0 0 1 0 \n0 1 0 0 0 0 0 0 \n0 0 0 1 0 0 0 0 \n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">python<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">05<\/span><span style=\"color: #9ECBFF\">NQueens.py<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Solution<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">found:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Code for all solution<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"def is_safe(board, row, col):\n    &quot;&quot;&quot; Check if it's safe to place a queen at board[row][col] &quot;&quot;&quot;\n    n = len(board)\n    \n    # Check column\n    for i in range(row):\n        if board[i][col] == 1:\n            return False\n    \n    # Check upper diagonal on left side\n    i, j = row, col\n    while i &gt;= 0 and j &gt;= 0:\n        if board[i][j] == 1:\n            return False\n        i -= 1\n        j -= 1\n    \n    # Check upper diagonal on right side\n    i, j = row, col\n    while i &gt;= 0 and j &lt; n:\n        if board[i][j] == 1:\n            return False\n        i -= 1\n        j += 1\n    \n    return True\n\ndef solve_queens(board, row, solutions):\n    &quot;&quot;&quot; Recursively solve the 8-Queens Problem using backtracking &quot;&quot;&quot;\n    n = len(board)\n    \n    # Base case: If all queens are placed, add the solution to the list\n    if row &gt;= n:\n        solutions.append([row[:] for row in board])\n        return\n    \n    for col in range(n):\n        if is_safe(board, row, col):\n            board[row][col] = 1  # Place the queen\n            solve_queens(board, row + 1, solutions)\n            board[row][col] = 0  # Backtrack\n\ndef print_board(board):\n    &quot;&quot;&quot; Print the board configuration &quot;&quot;&quot;\n    n = len(board)\n    for i in range(n):\n        for j in range(n):\n            print(board[i][j], end=&quot; &quot;)\n        print()\n    print()\n\ndef print_all_solutions():\n    &quot;&quot;&quot; Solve the 8-Queens Problem and print all distinct solutions &quot;&quot;&quot;\n    n = 8  # Size of the chessboard (8x8)\n    board = [[0] * n for _ in range(n)]  # Initialize empty board\n    solutions = []\n    \n    solve_queens(board, 0, solutions)\n    \n    # Print all solutions found\n    num_solutions = len(solutions)\n    if num_solutions == 0:\n        print(&quot;No solutions found.&quot;)\n    else:\n        print(f&quot;Total solutions found: {num_solutions}&quot;)\n        for idx, solution in enumerate(solutions, start=1):\n            print(f&quot;Solution {idx}:&quot;)\n            print_board(solution)\n\n# Call the function to print all solutions to the 8-Queens Problem\nprint_all_solutions()\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">is_safe<\/span><span style=\"color: #E1E4E8\">(board, row, col):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Check if it&#39;s safe to place a queen at board[row][col] &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    n <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">len<\/span><span style=\"color: #E1E4E8\">(board)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Check column<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(row):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> board[i][col] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Check upper diagonal on left side<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    i, j <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> row, col<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">&gt;=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">and<\/span><span style=\"color: #E1E4E8\"> j <\/span><span style=\"color: #F97583\">&gt;=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> board[i][j] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        i <\/span><span style=\"color: #F97583\">-=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        j <\/span><span style=\"color: #F97583\">-=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Check upper diagonal on right side<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    i, j <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> row, col<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">&gt;=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">and<\/span><span style=\"color: #E1E4E8\"> j <\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #E1E4E8\"> n:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> board[i][j] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        i <\/span><span style=\"color: #F97583\">-=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        j <\/span><span style=\"color: #F97583\">+=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">solve_queens<\/span><span style=\"color: #E1E4E8\">(board, row, solutions):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Recursively solve the 8-Queens Problem using backtracking &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    n <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">len<\/span><span style=\"color: #E1E4E8\">(board)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Base case: If all queens are placed, add the solution to the list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> row <\/span><span style=\"color: #F97583\">&gt;=<\/span><span style=\"color: #E1E4E8\"> n:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        solutions.append([row[:] <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> row <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> board])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> col <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> is_safe(board, row, col):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            board[row][col] <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #6A737D\"># Place the queen<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            solve_queens(board, row <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">, solutions)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            board[row][col] <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #6A737D\"># Backtrack<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">print_board<\/span><span style=\"color: #E1E4E8\">(board):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Print the board configuration &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    n <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">len<\/span><span style=\"color: #E1E4E8\">(board)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> j <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(board[i][j], <\/span><span style=\"color: #FFAB70\">end<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #9ECBFF\">&quot; &quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">print_all_solutions<\/span><span style=\"color: #E1E4E8\">():<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Solve the 8-Queens Problem and print all distinct solutions &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    n <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">8<\/span><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #6A737D\"># Size of the chessboard (8x8)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    board <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> [[<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">] <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #E1E4E8\"> n <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> _ <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(n)]  <\/span><span style=\"color: #6A737D\"># Initialize empty board<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    solutions <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    solve_queens(board, <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">, solutions)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Print all solutions found<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    num_solutions <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">len<\/span><span style=\"color: #E1E4E8\">(solutions)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> num_solutions <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;No solutions found.&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #F97583\">f<\/span><span style=\"color: #9ECBFF\">&quot;Total solutions found: <\/span><span style=\"color: #79B8FF\">{<\/span><span style=\"color: #E1E4E8\">num_solutions<\/span><span style=\"color: #79B8FF\">}<\/span><span style=\"color: #9ECBFF\">&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> idx, solution <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">enumerate<\/span><span style=\"color: #E1E4E8\">(solutions, <\/span><span style=\"color: #FFAB70\">start<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #F97583\">f<\/span><span style=\"color: #9ECBFF\">&quot;Solution <\/span><span style=\"color: #79B8FF\">{<\/span><span style=\"color: #E1E4E8\">idx<\/span><span style=\"color: #79B8FF\">}<\/span><span style=\"color: #9ECBFF\">:&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            print_board(solution)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># Call the function to print all solutions to the 8-Queens Problem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">print_all_solutions()<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Explanation:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <code>solve_queens<\/code> function is modified to collect all valid board configurations (<code>solutions<\/code>) when a complete arrangement of queens is found (<code>row &gt;= n<\/code>). Each solution is stored as a list of lists (<code>board<\/code> configuration).<\/li>\n\n\n\n<li>The <code>print_all_solutions<\/code> function initializes the chessboard (<code>board<\/code>) and an empty list (<code>solutions<\/code>) to store all found solutions. It then invokes <code>solve_queens<\/code> to recursively find all valid queen placements on the chessboard.<\/li>\n\n\n\n<li>After collecting all solutions, the function prints the total number of solutions found and iteratively prints each solution board configuration using the <code>print_board<\/code> function.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P06\">Question 6<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\"><strong>TSP using heuristic approach<\/strong><\/h2>\n\n\n\n<p class=\"has-e-1-e-4-e-8-color has-text-color\"><strong>Implementation of TSP using heuristic approach<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Code<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import sys\n\ndef nearest_neighbor_tsp(distances):\n    num_cities = len(distances)\n    \n    # Start from the first city (arbitrary choice)\n    tour = [0]  # Store the tour as a list of city indices\n    visited = set([0])  # Track visited cities\n    \n    current_city = 0\n    total_distance = 0\n    \n    while len(visited) &lt; num_cities:\n        nearest_city = None\n        min_distance = sys.maxsize\n        \n        # Find the nearest unvisited city\n        for next_city in range(num_cities):\n            if next_city not in visited and distances[current_city][next_city] &lt; min_distance:\n                nearest_city = next_city\n                min_distance = distances[current_city][next_city]\n        \n        # Move to the nearest city\n        tour.append(nearest_city)\n        visited.add(nearest_city)\n        total_distance += min_distance\n        current_city = nearest_city\n    \n    # Complete the tour by returning to the starting city\n    tour.append(0)\n    total_distance += distances[current_city][0]\n    \n    return tour, total_distance\n\n# Example usage:\nif __name__ == &quot;__main__&quot;:\n    # Example distance matrix (symmetric, square matrix)\n#    distances = [[0, 10, 15, 20], [10, 0, 35, 25], [15, 35, 0, 30], [20, 25, 30, 0]]\n    distances = [[ 0,  4,  8,  9, 12], [ 4,  0,  6,  8,  9], [ 8,  6,  0, 10, 11], [ 9,  8, 10,  0,  7], [12,  9, 11,  7,  0]]\n    # Run nearest neighbor TSP algorithm\n    tour, total_distance = nearest_neighbor_tsp(distances)\n    \n    # Print the tour and total distance\n    print(&quot;Nearest Neighbor TSP Tour:&quot;, tour)\n    print(&quot;Total Distance:&quot;, total_distance)\n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> sys<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">nearest_neighbor_tsp<\/span><span style=\"color: #E1E4E8\">(distances):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    num_cities <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">len<\/span><span style=\"color: #E1E4E8\">(distances)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Start from the first city (arbitrary choice)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    tour <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> [<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">]  <\/span><span style=\"color: #6A737D\"># Store the tour as a list of city indices<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    visited <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">set<\/span><span style=\"color: #E1E4E8\">([<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">])  <\/span><span style=\"color: #6A737D\"># Track visited cities<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    current_city <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    total_distance <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">len<\/span><span style=\"color: #E1E4E8\">(visited) <\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #E1E4E8\"> num_cities:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        nearest_city <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">None<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        min_distance <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> sys.maxsize<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #6A737D\"># Find the nearest unvisited city<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> next_city <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(num_cities):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> next_city <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> visited <\/span><span style=\"color: #F97583\">and<\/span><span style=\"color: #E1E4E8\"> distances[current_city][next_city] <\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #E1E4E8\"> min_distance:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                nearest_city <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> next_city<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                min_distance <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> distances[current_city][next_city]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #6A737D\"># Move to the nearest city<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        tour.append(nearest_city)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        visited.add(nearest_city)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        total_distance <\/span><span style=\"color: #F97583\">+=<\/span><span style=\"color: #E1E4E8\"> min_distance<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        current_city <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> nearest_city<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Complete the tour by returning to the starting city<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    tour.append(<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    total_distance <\/span><span style=\"color: #F97583\">+=<\/span><span style=\"color: #E1E4E8\"> distances[current_city][<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> tour, total_distance<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># Example usage:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__name__<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;__main__&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Example distance matrix (symmetric, square matrix)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">#    distances = [[0, 10, 15, 20], [10, 0, 35, 25], [15, 35, 0, 30], [20, 25, 30, 0]]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    distances <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> [[ <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">4<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">8<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">9<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">12<\/span><span style=\"color: #E1E4E8\">], [ <\/span><span style=\"color: #79B8FF\">4<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">6<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">8<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">9<\/span><span style=\"color: #E1E4E8\">], [ <\/span><span style=\"color: #79B8FF\">8<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">6<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">10<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">11<\/span><span style=\"color: #E1E4E8\">], [ <\/span><span style=\"color: #79B8FF\">9<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">8<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">10<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">7<\/span><span style=\"color: #E1E4E8\">], [<\/span><span style=\"color: #79B8FF\">12<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">9<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">11<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">7<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">]]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Run nearest neighbor TSP algorithm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    tour, total_distance <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> nearest_neighbor_tsp(distances)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Print the tour and total distance<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Nearest Neighbor TSP Tour:&quot;<\/span><span style=\"color: #E1E4E8\">, tour)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Total Distance:&quot;<\/span><span style=\"color: #E1E4E8\">, total_distance)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 06_TSP_heuristics.py \n\nNearest Neighbor TSP Tour: [0, 1, 2, 3, 4, 0]\nTotal Distance: 39\n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">python<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">06<\/span><span style=\"color: #9ECBFF\">_TSP_heuristics.py<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Nearest<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Neighbor<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">TSP<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Tour:<\/span><span style=\"color: #E1E4E8\"> [0, <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #9ECBFF\">,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #9ECBFF\">,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #9ECBFF\">,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">4<\/span><span style=\"color: #9ECBFF\">,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #9ECBFF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Total<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Distance:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">39<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P06\">Question 6<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\"><strong>TSP using heuristic approach<\/strong><\/h2>\n\n\n\n<p class=\"has-e-1-e-4-e-8-color has-text-color\"><strong>Implementation of TSP using heuristic approach<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Code<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import sys\n\ndef nearest_neighbor_tsp(distances):\n    num_cities = len(distances)\n    \n    # Start from the first city (arbitrary choice)\n    tour = [0]  # Store the tour as a list of city indices\n    visited = set([0])  # Track visited cities\n    \n    current_city = 0\n    total_distance = 0\n    \n    while len(visited) &lt; num_cities:\n        nearest_city = None\n        min_distance = sys.maxsize\n        \n        # Find the nearest unvisited city\n        for next_city in range(num_cities):\n            if next_city not in visited and distances[current_city][next_city] &lt; min_distance:\n                nearest_city = next_city\n                min_distance = distances[current_city][next_city]\n        \n        # Move to the nearest city\n        tour.append(nearest_city)\n        visited.add(nearest_city)\n        total_distance += min_distance\n        current_city = nearest_city\n    \n    # Complete the tour by returning to the starting city\n    tour.append(0)\n    total_distance += distances[current_city][0]\n    \n    return tour, total_distance\n\n# Example usage:\nif __name__ == &quot;__main__&quot;:\n    # Example distance matrix (symmetric, square matrix)\n#    distances = [[0, 10, 15, 20], [10, 0, 35, 25], [15, 35, 0, 30], [20, 25, 30, 0]]\n    distances = [[ 0,  4,  8,  9, 12], [ 4,  0,  6,  8,  9], [ 8,  6,  0, 10, 11], [ 9,  8, 10,  0,  7], [12,  9, 11,  7,  0]]\n    # Run nearest neighbor TSP algorithm\n    tour, total_distance = nearest_neighbor_tsp(distances)\n    \n    # Print the tour and total distance\n    print(&quot;Nearest Neighbor TSP Tour:&quot;, tour)\n    print(&quot;Total Distance:&quot;, total_distance)\n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> sys<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">nearest_neighbor_tsp<\/span><span style=\"color: #E1E4E8\">(distances):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    num_cities <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">len<\/span><span style=\"color: #E1E4E8\">(distances)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Start from the first city (arbitrary choice)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    tour <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> [<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">]  <\/span><span style=\"color: #6A737D\"># Store the tour as a list of city indices<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    visited <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">set<\/span><span style=\"color: #E1E4E8\">([<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">])  <\/span><span style=\"color: #6A737D\"># Track visited cities<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    current_city <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    total_distance <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">len<\/span><span style=\"color: #E1E4E8\">(visited) <\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #E1E4E8\"> num_cities:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        nearest_city <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">None<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        min_distance <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> sys.maxsize<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #6A737D\"># Find the nearest unvisited city<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> next_city <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(num_cities):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> next_city <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> visited <\/span><span style=\"color: #F97583\">and<\/span><span style=\"color: #E1E4E8\"> distances[current_city][next_city] <\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #E1E4E8\"> min_distance:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                nearest_city <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> next_city<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                min_distance <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> distances[current_city][next_city]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #6A737D\"># Move to the nearest city<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        tour.append(nearest_city)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        visited.add(nearest_city)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        total_distance <\/span><span style=\"color: #F97583\">+=<\/span><span style=\"color: #E1E4E8\"> min_distance<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        current_city <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> nearest_city<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Complete the tour by returning to the starting city<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    tour.append(<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    total_distance <\/span><span style=\"color: #F97583\">+=<\/span><span style=\"color: #E1E4E8\"> distances[current_city][<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> tour, total_distance<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># Example usage:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__name__<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;__main__&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Example distance matrix (symmetric, square matrix)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">#    distances = [[0, 10, 15, 20], [10, 0, 35, 25], [15, 35, 0, 30], [20, 25, 30, 0]]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    distances <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> [[ <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">4<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">8<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">9<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">12<\/span><span style=\"color: #E1E4E8\">], [ <\/span><span style=\"color: #79B8FF\">4<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">6<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">8<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">9<\/span><span style=\"color: #E1E4E8\">], [ <\/span><span style=\"color: #79B8FF\">8<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">6<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">10<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">11<\/span><span style=\"color: #E1E4E8\">], [ <\/span><span style=\"color: #79B8FF\">9<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">8<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">10<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">7<\/span><span style=\"color: #E1E4E8\">], [<\/span><span style=\"color: #79B8FF\">12<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">9<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">11<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">7<\/span><span style=\"color: #E1E4E8\">,  <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">]]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Run nearest neighbor TSP algorithm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    tour, total_distance <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> nearest_neighbor_tsp(distances)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># Print the tour and total distance<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Nearest Neighbor TSP Tour:&quot;<\/span><span style=\"color: #E1E4E8\">, tour)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Total Distance:&quot;<\/span><span style=\"color: #E1E4E8\">, total_distance)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Explanation:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <code>nearest_neighbor_tsp<\/code> function implements the Nearest Neighbor heuristic for the Traveling Salesman Problem. It takes a distance matrix (<code>distances<\/code>) as input, where <code>distances[i][j]<\/code> represents the distance between city <code>i<\/code> and city <code>j<\/code>.<\/li>\n\n\n\n<li>The algorithm starts from an arbitrary city (e.g., city 0) and iteratively selects the nearest unvisited city to extend the tour until all cities are visited.<\/li>\n\n\n\n<li>In each iteration, the algorithm finds the nearest unvisited city to the current city by scanning through the distances. It selects the city with the shortest distance that has not been visited yet.<\/li>\n\n\n\n<li>The tour is represented as a list of city indices (<code>tour<\/code>), and the total tour distance is accumulated (<code>total_distance<\/code>) by summing up the distances between consecutive cities in the tour.<\/li>\n\n\n\n<li>The tour is completed by returning to the starting city (closing the loop), and the final tour and total distance are returned as the output.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 06_TSP_heuristics.py \n\nNearest Neighbor TSP Tour: [0, 1, 2, 3, 4, 0]\nTotal Distance: 39\n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">python<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">06<\/span><span style=\"color: #9ECBFF\">_TSP_heuristics.py<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Nearest<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Neighbor<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">TSP<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Tour:<\/span><span style=\"color: #E1E4E8\"> [0, <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #9ECBFF\">,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #9ECBFF\">,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #9ECBFF\">,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">4<\/span><span style=\"color: #9ECBFF\">,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #9ECBFF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Total<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Distance:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">39<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\" id=\"P07\">Question 7<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\"><strong><strong>Forward Chaining and Backward<\/strong> <strong>Chaining<\/strong>.<\/strong><\/h2>\n\n\n\n<p class=\"has-e-1-e-4-e-8-color has-text-color\"><strong>Implementation of the problem solving strategies: either using Forward Chaining or Backward<\/strong> <strong>Chaining<\/strong>.<\/p>\n\n\n\n<p>To demonstrate problem-solving strategies like Forward Chaining or Backward Chaining, we can use a simple example involving logical rules and a goal to be proven or derived. These strategies are commonly used in expert systems and knowledge-based systems for reasoning and inference.<\/p>\n\n\n\n<p>Let&#8217;s implement both Forward Chaining and Backward Chaining with a specific example to illustrate how these strategies work.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example Scenario:<\/h3>\n\n\n\n<p>Consider a simple knowledge base containing logical rules and facts related to animal classification. We want to use either Forward Chaining or Backward Chaining to determine whether a given animal is classified as a mammal or bird based on the provided rules.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Knowledge Base:<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Rule: If an animal has hair and gives birth to live young, then it is a mammal.<\/li>\n\n\n\n<li>Rule: If an animal has feathers and can fly, then it is a bird.<\/li>\n\n\n\n<li>Fact: A cat has hair.<\/li>\n\n\n\n<li>Fact: A cat gives birth to live young.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Goal:<\/h4>\n\n\n\n<p>Determine whether a cat is classified as a mammal.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Forward Chaining:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In Forward Chaining, we start with known facts (<code>facts<\/code>) and repeatedly apply logical rules (<code>rules<\/code>) to infer new facts until we reach the desired goal (<code>goal<\/code>).<\/li>\n\n\n\n<li>The <code>forward_chaining<\/code> function iterates through the rules and checks if all conditions of a rule are satisfied based on the inferred facts (<code>inferred_facts<\/code>). If so, it adds the result of the rule to the inferred facts.<\/li>\n\n\n\n<li>The process continues until no new facts can be inferred (<code>new_facts<\/code> is <code>False<\/code>) or the goal is reached (<code>result == goal<\/code>).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Backward Chaining:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In Backward Chaining, we start with a goal (<code>goal<\/code>) and recursively verify if it can be proven true by checking facts (<code>facts<\/code>) and applying rules (<code>rules<\/code>) in reverse.<\/li>\n\n\n\n<li>The <code>backward_chaining<\/code> function uses a nested <code>ask<\/code> function to recursively verify if a goal can be derived by checking its conditions against known facts and recursively asking for its dependencies.<\/li>\n\n\n\n<li>If the goal can be proven (<code>ask(goal)<\/code> returns <code>True<\/code>), then the conclusion is reached; otherwise, it&#8217;s not.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Python Code<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"def forward_chaining(rules, facts, goal):\n    inferred_facts = set(facts)\n    new_facts = True\n    \n    while new_facts:\n        new_facts = False\n        \n        for rule in rules:\n            condition, result = rule\n            \n            if all(cond in inferred_facts for cond in condition) and result not in inferred_facts:\n                inferred_facts.add(result)\n                new_facts = True\n                \n                if result == goal:\n                    return True\n    \n    return False\n\n\ndef backward_chaining(rules, facts, goal):\n    def ask(query):\n        if query in facts:\n            return True\n        \n        for rule in rules:\n            condition, result = rule\n            if result == query and all(ask(cond) for cond in condition):\n                return True\n        \n        return False\n    \n    return ask(goal)\n\n\n\n# Define the rules and facts for the animal classification problem\nrules = [\n    (['hair', 'live young'], 'mammal'),\n    (['feathers', 'fly'], 'bird')\n]\n\nfacts = ['hair', 'live young']\ngoal = 'mammal'\n\n\n# Use forward chaining to determine if a cat is classified as a mammal\nis_mammal = forward_chaining(rules, facts, goal)\n\nif is_mammal:\n    print(&quot;The cat is classified as a mammal.&quot;)\nelse:\n    print(&quot;The cat is not classified as a mammal.&quot;)\n\nfacts = ['feathers', 'fly']\ngoal = 'bird'\n\n# Use backward chaining to determine if a pigeon is classified as a bird\nis_bird = backward_chaining(rules, facts, goal)\n\nif is_bird:\n    print(&quot;The pigeon is classified as a bird.&quot;)\nelse:\n    print(&quot;The pigeon is not classified as a bird.&quot;)\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">forward_chaining<\/span><span style=\"color: #E1E4E8\">(rules, facts, goal):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    inferred_facts <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">set<\/span><span style=\"color: #E1E4E8\">(facts)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    new_facts <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> new_facts:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        new_facts <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> rule <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> rules:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            condition, result <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> rule<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">all<\/span><span style=\"color: #E1E4E8\">(cond <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> inferred_facts <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> cond <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> condition) <\/span><span style=\"color: #F97583\">and<\/span><span style=\"color: #E1E4E8\"> result <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> inferred_facts:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                inferred_facts.add(result)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                new_facts <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> result <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> goal:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">False<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">backward_chaining<\/span><span style=\"color: #E1E4E8\">(rules, facts, goal):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">ask<\/span><span style=\"color: #E1E4E8\">(query):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> query <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> facts:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> rule <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> rules:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            condition, result <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> rule<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> result <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> query <\/span><span style=\"color: #F97583\">and<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">all<\/span><span style=\"color: #E1E4E8\">(ask(cond) <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> cond <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> condition):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> ask(goal)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># Define the rules and facts for the animal classification problem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">rules <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    ([<\/span><span style=\"color: #9ECBFF\">&#39;hair&#39;<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #9ECBFF\">&#39;live young&#39;<\/span><span style=\"color: #E1E4E8\">], <\/span><span style=\"color: #9ECBFF\">&#39;mammal&#39;<\/span><span style=\"color: #E1E4E8\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    ([<\/span><span style=\"color: #9ECBFF\">&#39;feathers&#39;<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #9ECBFF\">&#39;fly&#39;<\/span><span style=\"color: #E1E4E8\">], <\/span><span style=\"color: #9ECBFF\">&#39;bird&#39;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">facts <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> [<\/span><span style=\"color: #9ECBFF\">&#39;hair&#39;<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #9ECBFF\">&#39;live young&#39;<\/span><span style=\"color: #E1E4E8\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">goal <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;mammal&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># Use forward chaining to determine if a cat is classified as a mammal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">is_mammal <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> forward_chaining(rules, facts, goal)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> is_mammal:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;The cat is classified as a mammal.&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;The cat is not classified as a mammal.&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">facts <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> [<\/span><span style=\"color: #9ECBFF\">&#39;feathers&#39;<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #9ECBFF\">&#39;fly&#39;<\/span><span style=\"color: #E1E4E8\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">goal <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;bird&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># Use backward chaining to determine if a pigeon is classified as a bird<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">is_bird <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> backward_chaining(rules, facts, goal)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> is_bird:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;The pigeon is classified as a bird.&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;The pigeon is not classified as a bird.&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-e-1-e-4-e-8-color has-text-color\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 07_Fwd_Bwd_chaining.py \n\nUsing forward chaining the cat is classified as a mammal.\nUsing backward chaining the pigeon is classified as a bird.\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">python<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">07<\/span><span style=\"color: #9ECBFF\">_Fwd_Bwd_chaining.py<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Using<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">forward<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">chaining<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">cat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">classified<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">as<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">a<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">mammal.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Using<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">backward<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">chaining<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">the<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">pigeon<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">classified<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">as<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">a<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">bird.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Both Forward Chaining and Backward Chaining are fundamental strategies in AI and expert systems for reasoning and inference, each suitable for different problem contexts and domains. Experiment with different rules, facts, and goals to explore the capabilities and limitations of these approaches in solving logical reasoning tasks.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity has-e-1-e-4-e-8-color has-text-color\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"P08\">Question 8<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Resolution principle on First-Order Predicate Logic<\/strong><\/strong><\/h2>\n\n\n\n<p><strong>Implement resolution principle on FOPL related problems<\/strong><\/p>\n\n\n\n<p>The resolution principle is a fundamental method used in automated theorem proving for first-order predicate logic (FOPL). It involves resolving two clauses to derive a new clause, aiming to prove or disprove a given statement or query. Here&#8217;s an implementation of the resolution principle in Python for resolving clauses and demonstrating its application on FOPL-related problems.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Python Code<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"def negate_literal(literal):\n    &quot;&quot;&quot; Negate a literal by adding or removing the negation symbol '~' &quot;&quot;&quot;\n    if literal.startswith('~'):\n        return literal[1:]  # Remove negation\n    else:\n        return '~' + literal  # Add negation\n\ndef resolve(clause1, clause2):\n    &quot;&quot;&quot; Resolve two clauses to derive a new clause &quot;&quot;&quot;\n    new_clause = []\n    resolved = False\n    \n    # Copy literals from both clauses\n    for literal in clause1:\n        if negate_literal(literal) in clause2:\n            resolved = True\n        else:\n            new_clause.append(literal)\n    \n    for literal in clause2:\n        if negate_literal(literal) not in clause1:\n            new_clause.append(literal)\n    \n    if resolved:\n        return new_clause\n    else:\n        return None  # No resolution possible\n\ndef resolution(propositional_kb, query):\n    &quot;&quot;&quot; Use resolution to prove or disprove a query using propositional logic &quot;&quot;&quot;\n    kb = propositional_kb[:]\n    kb.append(negate_literal(query))  # Add negated query to knowledge base\n    \n    while True:\n        new_clauses = []\n        n = len(kb)\n        resolved_pairs = set()  # Track resolved pairs to avoid redundant resolutions\n        \n        for i in range(n):\n            for j in range(i + 1, n):\n                clause1 = kb[i]\n                clause2 = kb[j]\n                \n                if (clause1, clause2) not in resolved_pairs:\n                    resolved_pairs.add((clause1, clause2))\n                    resolvent = resolve(clause1, clause2)\n                    \n                    if resolvent is None:\n                        continue  # No resolution possible for these clauses\n                    \n                    if len(resolvent) == 0:\n                        return True  # Empty clause (contradiction), query is proved\n                    \n                    if resolvent not in new_clauses:\n                        new_clauses.append(resolvent)\n        \n        if all(clause in kb for clause in new_clauses):\n            return False  # No new clauses added, query cannot be proven\n        \n        kb.extend(new_clauses)  # Add new clauses to the knowledge base\n\n# Example usage:\nif __name__ == &quot;__main__&quot;:\n    # Example propositional knowledge base (list of clauses)\n    propositional_kb = [\n        ['~P', 'Q'],\n        ['P', '~Q', 'R'],\n        ['~R', 'S']\n    ]\n    \n    # Example query to prove\/disprove using resolution\n    query = 'S'\n    \n    # Use resolution to prove or disprove the query\n    result = resolution(propositional_kb, query)\n    \n    if result:\n        print(f&quot;The query '{query}' is PROVED.&quot;)\n    else:\n        print(f&quot;The query '{query}' is DISPROVED.&quot;)\n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #E1E4E8\">def negate_literal(literal):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Negate a literal by adding or removing the negation symbol &#39;~&#39; &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">literal<\/span><span style=\"color: #E1E4E8\">.<\/span><span style=\"color: #79B8FF\">startswith<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&#39;~&#39;<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> literal[1:]  # <\/span><span style=\"color: #F97583\">Remove<\/span><span style=\"color: #E1E4E8\"> negation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;~&#39;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> literal  # <\/span><span style=\"color: #F97583\">Add<\/span><span style=\"color: #E1E4E8\"> negation<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">def resolve(clause1, clause2):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Resolve two clauses to derive a new clause &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    new_clause <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    resolved <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #E1E4E8\"># <\/span><span style=\"color: #F97583\">Copy<\/span><span style=\"color: #E1E4E8\"> literals <\/span><span style=\"color: #F97583\">from<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">both<\/span><span style=\"color: #E1E4E8\"> clauses<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> literal <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> clause1:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> negate_literal(literal) <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> clause2:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            resolved <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">new_clause<\/span><span style=\"color: #E1E4E8\">.<\/span><span style=\"color: #79B8FF\">append<\/span><span style=\"color: #E1E4E8\">(literal)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> literal <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> clause2:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> negate_literal(literal) <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> clause1:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">new_clause<\/span><span style=\"color: #E1E4E8\">.<\/span><span style=\"color: #79B8FF\">append<\/span><span style=\"color: #E1E4E8\">(literal)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> resolved:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> new_clause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">None<\/span><span style=\"color: #E1E4E8\">  # <\/span><span style=\"color: #F97583\">No<\/span><span style=\"color: #E1E4E8\"> resolution possible<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">def resolution(propositional_kb, query):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Use resolution to prove or disprove a query using propositional logic &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    kb <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> propositional_kb[:]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">kb<\/span><span style=\"color: #E1E4E8\">.<\/span><span style=\"color: #79B8FF\">append<\/span><span style=\"color: #E1E4E8\">(negate_literal(query))  # <\/span><span style=\"color: #F97583\">Add<\/span><span style=\"color: #E1E4E8\"> negated query <\/span><span style=\"color: #F97583\">to<\/span><span style=\"color: #E1E4E8\"> knowledge base<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> True:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        new_clauses <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        n <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">len<\/span><span style=\"color: #E1E4E8\">(kb)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        resolved_pairs <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">set<\/span><span style=\"color: #E1E4E8\">()  # Track resolved pairs <\/span><span style=\"color: #F97583\">to<\/span><span style=\"color: #E1E4E8\"> avoid redundant resolutions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">range<\/span><span style=\"color: #E1E4E8\">(n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> j <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">range<\/span><span style=\"color: #E1E4E8\">(i <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">, n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                clause1 <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> kb[i]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                clause2 <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> kb[j]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> (clause1, clause2) <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> resolved_pairs:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                    <\/span><span style=\"color: #79B8FF\">resolved_pairs<\/span><span style=\"color: #E1E4E8\">.<\/span><span style=\"color: #79B8FF\">add<\/span><span style=\"color: #E1E4E8\">((clause1, clause2))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                    resolvent <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> resolve(clause1, clause2)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> resolvent <\/span><span style=\"color: #F97583\">is<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">None<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                        <\/span><span style=\"color: #F97583\">continue<\/span><span style=\"color: #E1E4E8\">  # <\/span><span style=\"color: #F97583\">No<\/span><span style=\"color: #E1E4E8\"> resolution possible <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> these clauses<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">len<\/span><span style=\"color: #E1E4E8\">(resolvent) <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> True  # <\/span><span style=\"color: #F97583\">Empty<\/span><span style=\"color: #E1E4E8\"> clause (contradiction), query <\/span><span style=\"color: #F97583\">is<\/span><span style=\"color: #E1E4E8\"> proved<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> resolvent <\/span><span style=\"color: #F97583\">not<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> new_clauses:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                        <\/span><span style=\"color: #79B8FF\">new_clauses<\/span><span style=\"color: #E1E4E8\">.<\/span><span style=\"color: #79B8FF\">append<\/span><span style=\"color: #E1E4E8\">(resolvent)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> all(clause <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> kb <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> clause <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> new_clauses):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> False  # <\/span><span style=\"color: #F97583\">No<\/span><span style=\"color: #E1E4E8\"> new clauses added, query cannot be proven<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">kb<\/span><span style=\"color: #E1E4E8\">.<\/span><span style=\"color: #79B8FF\">extend<\/span><span style=\"color: #E1E4E8\">(new_clauses)  # <\/span><span style=\"color: #F97583\">Add<\/span><span style=\"color: #E1E4E8\"> new clauses <\/span><span style=\"color: #F97583\">to<\/span><span style=\"color: #E1E4E8\"> the knowledge base<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\"># Example usage:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> __name__ <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;__main__&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #E1E4E8\"># Example propositional knowledge base (list of clauses)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    propositional_kb <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        [&#39;~P&#39;, &#39;Q&#39;],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        [&#39;P&#39;, &#39;~Q&#39;, &#39;R&#39;],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        [&#39;~R&#39;, &#39;S&#39;]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #E1E4E8\"># Example query <\/span><span style=\"color: #F97583\">to<\/span><span style=\"color: #E1E4E8\"> prove<\/span><span style=\"color: #F97583\">\/<\/span><span style=\"color: #E1E4E8\">disprove <\/span><span style=\"color: #F97583\">using<\/span><span style=\"color: #E1E4E8\"> resolution<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    query <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;S&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #E1E4E8\"># <\/span><span style=\"color: #F97583\">Use<\/span><span style=\"color: #E1E4E8\"> resolution <\/span><span style=\"color: #F97583\">to<\/span><span style=\"color: #E1E4E8\"> prove <\/span><span style=\"color: #F97583\">or<\/span><span style=\"color: #E1E4E8\"> disprove the query<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    result <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> resolution(propositional_kb, query)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> result:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">print<\/span><span style=\"color: #E1E4E8\">(f<\/span><span style=\"color: #9ECBFF\">&quot;The query &#39;{query}&#39; is PROVED.&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">print<\/span><span style=\"color: #E1E4E8\">(f<\/span><span style=\"color: #9ECBFF\">&quot;The query &#39;{query}&#39; is DISPROVED.&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Given the <code>propositional_kb<\/code> and <code>query<\/code>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Knowledge Base (<code>propositional_kb<\/code>)<\/strong>:\n<ul class=\"wp-block-list\">\n<li>If <code>P<\/code> is false, then <code>Q<\/code> is true (<code>~P<\/code> implies <code>Q<\/code>).<\/li>\n\n\n\n<li>If <code>P<\/code> is true and <code>Q<\/code> is false, then <code>R<\/code> is true (<code>P<\/code> and <code>~Q<\/code> imply <code>R<\/code>).<\/li>\n\n\n\n<li>If <code>R<\/code> is false, then <code>S<\/code> is true (<code>~R<\/code> implies <code>S<\/code>).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Query (<code>query<\/code>)<\/strong>: <code>'S'<\/code>\n<ul class=\"wp-block-list\">\n<li>We want to determine whether the proposition <code>S<\/code> can be proven (<code>True<\/code>) or disproven (<code>False<\/code>) using the knowledge base and the resolution principle.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Applying Resolution:<\/h3>\n\n\n\n<p>The <code>resolution<\/code> function will use the <code>propositional_kb<\/code> and the negated <code>query<\/code> (<code>'~S'<\/code>) to try to derive a contradiction or prove the query <code>S<\/code> using resolution steps. It iteratively applies resolution on pairs of clauses from the knowledge base (<code>propositional_kb<\/code>) to derive new clauses until no new clauses can be derived or a contradiction (empty clause) is found.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Running the Code:<\/h3>\n\n\n\n<p>When running the provided code:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <code>resolution<\/code> function will attempt to prove or disprove the query <code>'S'<\/code> using the propositional knowledge base (<code>propositional_kb<\/code>) and the resolution principle.<\/li>\n\n\n\n<li>If the query <code>S<\/code> can be proven (<code>True<\/code>), it means that <code>S<\/code> logically follows from the clauses in the knowledge base.<\/li>\n\n\n\n<li>If the query <code>S<\/code> is disproved (<code>False<\/code>), it means that <code>S<\/code> cannot be logically derived from the knowledge base and its negation (<code>~S<\/code>) cannot be refuted.<\/li>\n<\/ul>\n\n\n\n<p>This example demonstrates how resolution can be used for automated theorem proving in propositional logic, providing insights into logical inference and reasoning based on given rules and facts. Adjusting the clauses and queries allows for exploring different logical scenarios and testing the effectiveness of the resolution principle in logical reasoning tasks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 08_fopl.py \nThe query 'S' is DISPROVED.\n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #E1E4E8\">$ python <\/span><span style=\"color: #79B8FF\">08_fopl<\/span><span style=\"color: #E1E4E8\">.<\/span><span style=\"color: #79B8FF\">py<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">The query <\/span><span style=\"color: #9ECBFF\">&#39;S&#39;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">is<\/span><span style=\"color: #E1E4E8\"> DISPROVED.<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"P09\">Question 9<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Tic-Tac-Toe game<\/strong><\/strong><\/h2>\n\n\n\n<p><strong>Implement Tic-Tac-Toe game using Python.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Python Code<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"def print_board(board):\n    &quot;&quot;&quot; Print the current state of the Tic-Tac-Toe board &quot;&quot;&quot;\n    for row in board:\n        print(&quot; | &quot;.join(row))\n        print(&quot;-&quot; * 9)\n\ndef check_winner(board, player):\n    &quot;&quot;&quot; Check if the specified player has won the game &quot;&quot;&quot;\n    for row in board:\n        if all(cell == player for cell in row):\n            return True\n    for col in range(3):\n        if all(board[row][col] == player for row in range(3)):\n            return True\n    if all(board[i][i] == player for i in range(3)):\n        return True\n    if all(board[i][2-i] == player for i in range(3)):\n        return True\n    return False\n\ndef is_full(board):\n    &quot;&quot;&quot; Check if the board is completely filled &quot;&quot;&quot;\n    return all(cell != ' ' for row in board for cell in row)\n\ndef tic_tac_toe():\n    &quot;&quot;&quot; Main function to run the Tic-Tac-Toe game &quot;&quot;&quot;\n    board = [[' ' for _ in range(3)] for _ in range(3)]\n    current_player = 'X'\n\n    while True:\n        print_board(board)\n        print(f&quot;Player {current_player}'s turn.&quot;)\n        row = int(input(&quot;Enter row (1-3): &quot;))\n        col = int(input(&quot;Enter column (1-3): &quot;))\n        row -= 1\n        col -= 1\n\t\t\n        if board[row][col] == ' ':\n            board[row][col] = current_player\n        else:\n            print(&quot;Invalid move! Try again.&quot;)\n            continue\n\n        # Check if the current player has won\n        if check_winner(board, current_player):\n            print_board(board)\n            print(f&quot;Player {current_player} wins!&quot;)\n            break\n\n        # Check if the board is full (tie game)\n        if is_full(board):\n            print_board(board)\n            print(&quot;It's a tie!&quot;)\n            break\n\n        # Switch to the other player\n        current_player = 'O' if current_player == 'X' else 'X'\n\nif __name__ == &quot;__main__&quot;:\n    tic_tac_toe()\n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">print_board<\/span><span style=\"color: #E1E4E8\">(board):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Print the current state of the Tic-Tac-Toe board &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> row <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> board:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot; | &quot;<\/span><span style=\"color: #E1E4E8\">.join(row))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;-&quot;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">9<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">check_winner<\/span><span style=\"color: #E1E4E8\">(board, player):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Check if the specified player has won the game &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> row <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> board:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">all<\/span><span style=\"color: #E1E4E8\">(cell <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> player <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> cell <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> row):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> col <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">all<\/span><span style=\"color: #E1E4E8\">(board[row][col] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> player <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> row <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\">)):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">all<\/span><span style=\"color: #E1E4E8\">(board[i][i] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> player <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\">)):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">all<\/span><span style=\"color: #E1E4E8\">(board[i][<\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\">i] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> player <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\">)):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">False<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">is_full<\/span><span style=\"color: #E1E4E8\">(board):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Check if the board is completely filled &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">all<\/span><span style=\"color: #E1E4E8\">(cell <\/span><span style=\"color: #F97583\">!=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39; &#39;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> row <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> board <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> cell <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> row)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">tic_tac_toe<\/span><span style=\"color: #E1E4E8\">():<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot; Main function to run the Tic-Tac-Toe game &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    board <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> [[<\/span><span style=\"color: #9ECBFF\">&#39; &#39;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> _ <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\">)] <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> _ <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\">)]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    current_player <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;X&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">True<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        print_board(board)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #F97583\">f<\/span><span style=\"color: #9ECBFF\">&quot;Player <\/span><span style=\"color: #79B8FF\">{<\/span><span style=\"color: #E1E4E8\">current_player<\/span><span style=\"color: #79B8FF\">}<\/span><span style=\"color: #9ECBFF\">&#39;s turn.&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        row <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">input<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Enter row (1-3): &quot;<\/span><span style=\"color: #E1E4E8\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        col <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">input<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Enter column (1-3): &quot;<\/span><span style=\"color: #E1E4E8\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        row <\/span><span style=\"color: #F97583\">-=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        col <\/span><span style=\"color: #F97583\">-=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> board[row][col] <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39; &#39;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            board[row][col] <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> current_player<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;Invalid move! Try again.&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">continue<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #6A737D\"># Check if the current player has won<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> check_winner(board, current_player):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            print_board(board)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #F97583\">f<\/span><span style=\"color: #9ECBFF\">&quot;Player <\/span><span style=\"color: #79B8FF\">{<\/span><span style=\"color: #E1E4E8\">current_player<\/span><span style=\"color: #79B8FF\">}<\/span><span style=\"color: #9ECBFF\"> wins!&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">break<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #6A737D\"># Check if the board is full (tie game)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> is_full(board):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            print_board(board)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;It&#39;s a tie!&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">break<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #6A737D\"># Switch to the other player<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        current_player <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;O&#39;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> current_player <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;X&#39;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;X&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__name__<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;__main__&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    tic_tac_toe()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Output<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$ python 09_Tic_Tac_Toe.py \n  |   |  \n---------\n  |   |  \n---------\n  |   |  \n---------\nPlayer X's turn.\nEnter row (1-3): 2\nEnter column (1-3): 2\n  |   |  \n---------\n  | X |  \n---------\n  |   |  \n---------\nPlayer O's turn.\nEnter row (1-3): 1\nEnter column (1-3): 1\nO |   |  \n---------\n  | X |  \n---------\n  |   |  \n---------\nPlayer X's turn.\nEnter row (1-3): 1\nEnter column (1-3): 2\nO | X |  \n---------\n  | X |  \n---------\n  |   |  \n---------\nPlayer O's turn.\nEnter row (1-3): 3\nEnter column (1-3): 2\nO | X |  \n---------\n  | X |  \n---------\n  | O |  \n---------\nPlayer X's turn.\nEnter row (1-3): 1\nEnter column (1-3): 3\nO | X | X\n---------\n  | X |  \n---------\n  | O |  \n---------\nPlayer O's turn.\nEnter row (1-3): 3\nEnter column (1-3): 3\nO | X | X\n---------\n  | X |  \n---------\n  | O | O\n---------\nPlayer X's turn.\nEnter row (1-3): 3\nEnter column (1-3): 1\nO | X | X\n---------\n  | X |  \n---------\nX | O | O\n---------\nPlayer X wins!\n\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">python<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">09<\/span><span style=\"color: #9ECBFF\">_Tic_Tac_Toe.py<\/span><span style=\"color: #E1E4E8\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">   <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">   <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">   <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Player<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">X&#39;s turn.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">Enter row (1-3): 2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">Enter column (1-3): 2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">  |   |  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">  | X |  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">  |   |  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">Player O&#39;s<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">turn.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">row<\/span><span style=\"color: #E1E4E8\"> (1-3): 1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">column<\/span><span style=\"color: #E1E4E8\"> (1-3): 1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">O<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">   <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">X<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">   <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Player<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">X&#39;s turn.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">Enter row (1-3): 1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">Enter column (1-3): 2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">O | X |  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">  | X |  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">  |   |  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">Player O&#39;s<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">turn.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">row<\/span><span style=\"color: #E1E4E8\"> (1-3): 3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">column<\/span><span style=\"color: #E1E4E8\"> (1-3): 2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">O<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">X<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">X<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">O<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Player<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">X&#39;s turn.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">Enter row (1-3): 1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">Enter column (1-3): 3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">O | X | X<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">  | X |  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">  | O |  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">Player O&#39;s<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">turn.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">row<\/span><span style=\"color: #E1E4E8\"> (1-3): 3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Enter<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">column<\/span><span style=\"color: #E1E4E8\"> (1-3): 3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">O<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">X<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">X<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">X<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">O<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">O<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">Player<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">X&#39;s turn.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">Enter row (1-3): 3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">Enter column (1-3): 1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">O | X | X<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">  | X |  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">X | O | O<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">---------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9ECBFF\">Player X wins!<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>If you are also looking for other Lab Manuals, head over to my following blog :<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-myblogosphere wp-block-embed-myblogosphere\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"eipC2F74Pp\"><a href=\"https:\/\/moodle.sit.ac.in\/blog\/vtu-lab-manuals-using-foss\/\">VTU Lab Manuals using FOSS<\/a><\/blockquote><iframe class=\"wp-embedded-content lazyload\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;VTU Lab Manuals using FOSS&#8221; &#8212; MyBlogosphere\" data-src=\"https:\/\/moodle.sit.ac.in\/blog\/vtu-lab-manuals-using-foss\/embed\/#?secret=jFcw4jhGog#?secret=eipC2F74Pp\" data-secret=\"eipC2F74Pp\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>In this blog post, you will find solutions for the Artificial Intelligence Lab Component (BAD402) course work for the IV semester of VTU university. To follow along, you will need to have up a machine running any flavour of GNULinux OS. We recommend using the Anaconda Python Distribution for this lab. The solutions have been [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2256,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3],"tags":[358,92,361,360,362,78,26,338,35,40,81,43],"class_list":["post-2241","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming","tag-4th-sem","tag-4th-semester","tag-artificial-intelligence-lab-component","tag-artificial-intelligence-lab-component-bad402","tag-bad402","tag-cse","tag-foss","tag-iv-semester","tag-lab-manual","tag-python","tag-spyder","tag-vtu"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/moodle.sit.ac.in\/blog\/wp-content\/uploads\/2024\/05\/ai-product.jpg?fit=750%2C417&ssl=1","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/posts\/2241","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/comments?post=2241"}],"version-history":[{"count":34,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/posts\/2241\/revisions"}],"predecessor-version":[{"id":2321,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/posts\/2241\/revisions\/2321"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/media\/2256"}],"wp:attachment":[{"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/media?parent=2241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/categories?post=2241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/moodle.sit.ac.in\/blog\/wp-json\/wp\/v2\/tags?post=2241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}