{"id":33852,"date":"2024-11-01T09:21:15","date_gmt":"2024-11-01T09:21:15","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33852"},"modified":"2024-11-01T10:55:49","modified_gmt":"2024-11-01T10:55:49","slug":"c-coding-test-course-finding-the-shortest-path","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33852\/","title":{"rendered":"C# Coding Test Course, Finding the Shortest Path"},"content":{"rendered":"<p><body><\/p>\n<p>In this course, we will solve the &#8220;Shortest Path&#8221; problem, which is commonly asked in algorithm tests using C#. This topic is very useful for understanding the basic concepts of graph theory and developing algorithmic problem-solving skills. In particular, we will explore how to solve this problem using popular algorithms such as Dijkstra&#8217;s algorithm.<\/p>\n<h2>Problem Description<\/h2>\n<p>Here is an example of the &#8220;Shortest Path&#8221; problem:<\/p>\n<p>In a village, there are N houses, and these houses are connected by edges. Each edge represents the time it takes to travel. Now, find the fastest route from House A to House B. The input consists of the number of houses N, the number of edges M, the information of each edge (starting house, ending house, travel time), and finally the numbers of House A and House B.<\/p>\n<h3>Input Format<\/h3>\n<ul>\n<li>First line: Number of houses N (1 \u2264 N \u2264 1000)<\/li>\n<li>Second line: Number of edges M (1 \u2264 M \u2264 10000)<\/li>\n<li>From the third line to the M + 2nd line: Edge information (starting house, ending house, travel time)<\/li>\n<li>Last line: Numbers of House A and House B<\/li>\n<\/ul>\n<h3>Output Format<\/h3>\n<p>Print the travel time of the fastest route. If it is not possible to go from House A to House B, print -1.<\/p>\n<h2>Solution<\/h2>\n<p>To solve this problem, we will use Dijkstra&#8217;s algorithm from graph theory. This algorithm is very effective for finding the shortest path in graphs with non-negative weights.<\/p>\n<h3>Dijkstra&#8217;s Algorithm<\/h3>\n<p>Dijkstra&#8217;s algorithm is a greedy algorithm that finds the shortest path from the starting node to all other nodes. The main idea of this algorithm is as follows:<\/p>\n<ol>\n<li>Initialize the shortest distance from the starting node to 0 and set the distances to all other nodes to infinity.<\/li>\n<li>Use a priority queue to select the node with the shortest distance from the current node.<\/li>\n<li>Update the distance information of the adjacent nodes based on the selected node.<\/li>\n<li>Repeat this process until the shortest distance for all nodes is calculated.<\/li>\n<\/ol>\n<h3>Code Implementation<\/h3>\n<p>Now, let&#8217;s implement Dijkstra&#8217;s algorithm in C#. Below is the code that finds the shortest path using the algorithm:<\/p>\n<pre><code>using System;\nusing System.Collections.Generic;\n\nclass Program\n{\n    static void Main(string[] args)\n    {\n        int N = int.Parse(Console.ReadLine());\n        int M = int.Parse(Console.ReadLine());\n\n        \/\/ Initialize graph\n        List<tuple<int, int=\"\">&gt;[] graph = new List<tuple<int, int=\"\">&gt;[N + 1];\n        for (int i = 1; i &lt;= N; i++)\n        {\n            graph[i] = new List<tuple<int, int=\"\">&gt;();\n        }\n\n        \/\/ Input edges\n        for (int i = 0; i &lt; M; i++)\n        {\n            var line = Console.ReadLine().Split();\n            int u = int.Parse(line[0]);\n            int v = int.Parse(line[1]);\n            int w = int.Parse(line[2]);\n            graph[u].Add(new Tuple<int, int=\"\">(v, w));\n            graph[v].Add(new Tuple<int, int=\"\">(u, w)); \/\/ Bidirectional edge\n        }\n\n        var lastLine = Console.ReadLine().Split();\n        int start = int.Parse(lastLine[0]);\n        int end = int.Parse(lastLine[1]);\n\n        \/\/ Find shortest path\n        var result = Dijkstra(graph, N, start, end);\n        Console.WriteLine(result);\n    }\n\n    static int Dijkstra(List<tuple<int, int=\"\">&gt;[] graph, int N, int start, int end)\n    {\n        int[] distances = new int[N + 1];\n        bool[] visited = new bool[N + 1];\n        int INF = int.MaxValue;\n\n        \/\/ Initialize distances to INF\n        for (int i = 1; i &lt;= N; i++)\n        {\n            distances[i] = INF;\n        }\n        distances[start] = 0;\n\n        \/\/ Priority queue\n        SortedSet<tuple<int, int=\"\">&gt; pq = new SortedSet<tuple<int, int=\"\">&gt;();\n        pq.Add(new Tuple<int, int=\"\">(0, start));\n\n        while (pq.Count &gt; 0)\n        {\n            var current = pq.Min;\n            pq.Remove(current);\n\n            int currDist = current.Item1;\n            int currNode = current.Item2;\n\n            if (visited[currNode])\n            {\n                continue;\n            }\n            visited[currNode] = true;\n\n            foreach (var neighbor in graph[currNode])\n            {\n                int nextNode = neighbor.Item1;\n                int weight = neighbor.Item2;\n\n                if (currDist + weight &lt; distances[nextNode])\n                {\n                    distances[nextNode] = currDist + weight;\n                    pq.Add(new Tuple<int, int=\"\">(distances[nextNode], nextNode));\n                }\n            }\n        }\n\n        return distances[end] == INF ? -1 : distances[end];\n    }\n}\n<\/int,><\/int,><\/tuple<int,><\/tuple<int,><\/tuple<int,><\/int,><\/int,><\/tuple<int,><\/tuple<int,><\/tuple<int,><\/code><\/pre>\n<h2>Code Explanation<\/h2>\n<p>The above code is an implementation of Dijkstra&#8217;s algorithm for finding the shortest path:<\/p>\n<ul>\n<li><strong>Graph Initialization:<\/strong> Input the number of houses N and the number of edges M, and represent the graph as a list.<\/li>\n<li><strong>Input Edges:<\/strong> Input each edge&#8217;s information and add it to the graph. Here, it is treated as a bidirectional edge.<\/li>\n<li><strong>Dijkstra Function:<\/strong> Contains the logic for finding the shortest path. Initializes the distance array and visit array, and uses a priority queue to select the node with the shortest distance.<\/li>\n<\/ul>\n<h2>Conclusion<\/h2>\n<p>In this course, we solved the shortest path problem using C#. We learned that Dijkstra&#8217;s algorithm can effectively find the shortest path in graphs. This technique can be very useful in coding tests and real-world development as well. I encourage you to solidify the basics of this algorithm by solving various problems.<\/p>\n<footer>\n<p>If you found this article helpful, please leave a comment and like it. Next time, I will return with a more interesting algorithm problem!<\/p>\n<\/footer>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this course, we will solve the &#8220;Shortest Path&#8221; problem, which is commonly asked in algorithm tests using C#. This topic is very useful for understanding the basic concepts of graph theory and developing algorithmic problem-solving skills. In particular, we will explore how to solve this problem using popular algorithms such as Dijkstra&#8217;s algorithm. Problem &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33852\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;C# Coding Test Course, Finding the Shortest Path&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[90],"tags":[],"class_list":["post-33852","post","type-post","status-publish","format-standard","hentry","category-c-coding-test-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C# Coding Test Course, Finding the Shortest Path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/33852\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C# Coding Test Course, Finding the Shortest Path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In this course, we will solve the &#8220;Shortest Path&#8221; problem, which is commonly asked in algorithm tests using C#. This topic is very useful for understanding the basic concepts of graph theory and developing algorithmic problem-solving skills. In particular, we will explore how to solve this problem using popular algorithms such as Dijkstra&#8217;s algorithm. Problem &hellip; \ub354 \ubcf4\uae30 &quot;C# Coding Test Course, Finding the Shortest Path&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33852\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:21:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T10:55:49+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"2\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/33852\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33852\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"C# Coding Test Course, Finding the Shortest Path\",\"datePublished\":\"2024-11-01T09:21:15+00:00\",\"dateModified\":\"2024-11-01T10:55:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33852\/\"},\"wordCount\":521,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"C# Coding Test Tutorials\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33852\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33852\/\",\"name\":\"C# Coding Test Course, Finding the Shortest Path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:21:15+00:00\",\"dateModified\":\"2024-11-01T10:55:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33852\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33852\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33852\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C# Coding Test Course, Finding the Shortest Path\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C# Coding Test Course, Finding the Shortest Path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/33852\/","og_locale":"ko_KR","og_type":"article","og_title":"C# Coding Test Course, Finding the Shortest Path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In this course, we will solve the &#8220;Shortest Path&#8221; problem, which is commonly asked in algorithm tests using C#. This topic is very useful for understanding the basic concepts of graph theory and developing algorithmic problem-solving skills. In particular, we will explore how to solve this problem using popular algorithms such as Dijkstra&#8217;s algorithm. Problem &hellip; \ub354 \ubcf4\uae30 \"C# Coding Test Course, Finding the Shortest Path\"","og_url":"https:\/\/atmokpo.com\/w\/33852\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:21:15+00:00","article_modified_time":"2024-11-01T10:55:49+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"2\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/33852\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33852\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"C# Coding Test Course, Finding the Shortest Path","datePublished":"2024-11-01T09:21:15+00:00","dateModified":"2024-11-01T10:55:49+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33852\/"},"wordCount":521,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["C# Coding Test Tutorials"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33852\/","url":"https:\/\/atmokpo.com\/w\/33852\/","name":"C# Coding Test Course, Finding the Shortest Path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:21:15+00:00","dateModified":"2024-11-01T10:55:49+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33852\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33852\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33852\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"C# Coding Test Course, Finding the Shortest Path"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=33852"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33852\/revisions"}],"predecessor-version":[{"id":33853,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33852\/revisions\/33853"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}