This problem related to retail industry. Retail company XYZ have some number of stores. It is providing website for its users, By using this site, users can select items and pickup them from store itself. Here the website makers has to provide shortest path to collect items from the store.

### Observe the below Store Map

- Blue Node is Starting node (Point where user starts)
- Green Node is End node (Point of billing)
- Black Nodes are intermediate nodes
- Red Nodes are points of item

### Basic Algorithm

- The basic algorithm is so simple.
- Start from starting point, connect next shortest Red node
- Connect next unvisited shortest red node from current red node
- Connect Green node from current red node

### Depth of this algorithm

Now we will go in depth of this algorithm. How will we find shortest red node ?. Here we have to use intermediate nodes (black nodes) with dijkstras algorithm to find shortest distance (Creating Minumum Spanning Tree).

- Find nearest node by dijkstras algorithm from starting node. Now customer will go from starting node to that nearest node and will pick his item.
- Then find nearest node from the node where customer picked the item. This node must be other than customer visited item node. Now customer will go from starting node to that nearest node and will pick his item.
- Complete 2nd step until customer collects all items.
- Then find nearest route from the current item node to target node. Now customer will go through that route and will reach to target billing node

### Java Code

**Node.java**

import java.util.ArrayList; public class Node implements Comparable<Node>{ double x; double y; boolean isVisited; boolean isTarget; boolean isSource; boolean isMainNode; ArrayList<Edge> edges = new ArrayList<Edge>(); double tDist = -1; int val; ArrayList<Edge> connectingEdges = new ArrayList<Edge>(); public Node(int i, double x, double y, boolean isVisited, boolean isTarget, boolean isSource, boolean isMainNode) { this.val = i; this.x = x; this.y = y; this.isVisited = isVisited; this.isTarget = isTarget; this.isSource = isSource; this.isMainNode = isMainNode; } public double getX() { return x; } public void setX(double x) { this.x = x; } public double getY() { return y; } public void setY(double y) { this.y = y; } public boolean isVisited() { return isVisited; } public void setVisited(boolean isVisited) { this.isVisited = isVisited; } public boolean isTarget() { return isTarget; } public void setTarget(boolean isTarget) { this.isTarget = isTarget; } public boolean isSource() { return isSource; } public void setSource(boolean isSource) { this.isSource = isSource; } public void addEdge(Edge ed) { edges.add(ed); } public void addConnectingEdge(Edge ed) { connectingEdges.add(ed); } @Override public String toString() { return "Node "+val; } @Override public int compareTo(Node o) { if(o.val == this.val) { return 0; } else { return 1; } } public void addConnectingEdge(ArrayList<Edge> connectignEdges2) { connectingEdges.addAll(connectignEdges2); } }

**Edge.java**

public class Edge { Node nd1; Node nd2; double distance; public Edge(Node nd1, Node nd2) { this.nd1 = nd1; this.nd2 = nd2; double xsq = (nd1.x - nd2.x) * (nd1.x - nd2.x); double ysq = (nd1.y - nd2.y) * (nd1.y - nd2.y); distance = Math.sqrt(xsq + ysq); nd1.addEdge(this); nd2.addEdge(this); } public Node getNd1() { return nd1; } public void setNd1(Node nd1) { this.nd1 = nd1; } public Node getNd2() { return nd2; } public void setNd2(Node nd2) { this.nd2 = nd2; } public double getDistance() { return distance; } public void setDistance(double distance) { this.distance = distance; } @Override public String toString() { return "Edge["+nd1.val+", "+nd2.val+"]"; } }

**GreedyPath.java**

import java.util.ArrayList; public class GreedyPath { public static void main(String[] args) { Node nd1 = new Node(1, 15, 15, false, false, false, false); Node nd2 = new Node(2, 35, 15, false, false, true, false); Node nd3 = new Node(3, 55, 15, false, false, false, false); Node nd4 = new Node(4, 15, 75, false, false, false, false); Node trg = new Node(5, 35, 75, false, true, false, false); Node nd6 = new Node(6, 55, 75, false, false, false, false); Node mn1 = new Node(7, 15, 60, false, false, false, true); Node mn2 = new Node(8, 35, 45, false, true, false, true); Node mn3 = new Node(9, 55, 25, false, false, false, true); ArrayList<Node> aln = new ArrayList<Node>(); aln.add(nd1); aln.add(nd2); aln.add(nd3); aln.add(nd4); aln.add(trg); aln.add(nd6); aln.add(mn1); aln.add(mn2); aln.add(mn3); new Edge(nd1,nd2); new Edge(nd2, nd3); new Edge(nd4, trg); new Edge(trg, nd6); new Edge(nd1,mn1); new Edge(nd4, mn1); new Edge(nd2, mn2); new Edge(trg, mn2); new Edge(nd3, mn3); new Edge(nd6, mn3); ArrayList<Node> mainPathNodes = new ArrayList<Node>(); ArrayList<Edge> mainPathEdges = new ArrayList<Edge>(); Node src = nd2; mainPathNodes.add(src); while(true) { resetNodes(aln); ArrayList<Node> connected = new ArrayList<Node>(); createMinimumSpanningTree(src, aln, connected, 0); Node minMainNode = null; double minDist = Double.MAX_VALUE; for(Node nd:connected) { if((nd.isMainNode && minDist > nd.tDist) && !mainPathNodes.contains(nd) && nd.val != src.val) { minMainNode = nd; minDist = nd.tDist; } } if(minMainNode!=null) { mainPathNodes.add(minMainNode); mainPathEdges.addAll(minMainNode.connectingEdges); src = minMainNode; } else { mainPathNodes.add(trg); mainPathEdges.addAll(trg.connectingEdges); break; } } System.out.println(mainPathNodes); System.out.println(mainPathEdges); } public static void createMinimumSpanningTree(Node src, ArrayList<Node> nodes, ArrayList<Node> connected, double dist) { src.tDist = dist; src.setVisited(true); connected.add(src); Node minNode = null; Node supMinNode = null; double minDist = Double.MAX_VALUE; Edge minEdge = null; for(Node nd:connected) { for(Edge ed:nd.edges) { if(nd.val == ed.nd1.val) { if(!ed.nd2.isVisited) { double tDist = nd.tDist + ed.distance; if(tDist < minDist) { minDist = tDist; minNode = ed.nd2; minEdge = ed; supMinNode = ed.nd1; } } } else { if(!ed.nd1.isVisited) { double tDist = nd.tDist + ed.distance; if(tDist < minDist) { minDist = tDist; minNode = ed.nd1; minEdge = ed; supMinNode = ed.nd2; } } } } } if(minNode != null) { minNode.addConnectingEdge(supMinNode.connectingEdges); minNode.addConnectingEdge(minEdge); createMinimumSpanningTree(minNode, nodes, connected, minDist); } } public static void resetNodes(ArrayList<Node> aln) { for(Node nd:aln) { nd.setVisited(false); nd.tDist = Double.MAX_VALUE; nd.connectingEdges.clear(); } } }

very interesting algorithm to learn more about it you can buy coursework on our website and the authors professionals will help you

ReplyDeletereally sweet algorithm. i will use it on

ReplyDeleteyoutube video downloaderthat is for sureThanks for this article very helpful. thanks. know more

ReplyDeleteAre you searching for cheap assignment writers? We are the best solution for you.

ReplyDeletehttps://www.cheapassignmentwriters.com/help-with-my-assignment

Extraordinary article. KrogerStoresFeedback

ReplyDeleteThankful to you, I should say to it's adequate post for blog. McDVOICE Survey

ReplyDeleteIncredible Article. Thankful to you, amazingly obliging.. does coconut flour expire

ReplyDeleteEver thought of flaunting a tanned look during winter? Reputable Salon in Boca Raton. If you are under the impression that this could only be possible after. Tanning Salons

ReplyDeleteThe article was up to the point and described the information about education and learning. Thanks to blog author for wonderful and informative post. boaz derra

ReplyDeleteThe article was up to the point and described the information about education and learning. Thanks to blog author for wonderful and informative post. physicians Disability insurance

ReplyDeleteThe article was up to the point and described the information about education and learning. Thanks to blog author for wonderful and informative post. drug detox in Florida

ReplyDeleteThe article was up to the point and described the information about education and learning. Thanks to blog author for wonderful and informative post. Bitcoin ATM near me

ReplyDeleteI really like the knowledge you provide here and can't wait to take a look when I get home.

ReplyDeleteI'm shocked at how quick your blog loaded on my mobile .. I'm not even using WIFI, just 3G ..

Anyways, very good blog!

Shalom Lamm

The article was up to the point and described the information about education and learning. Thanks to blog author for wonderful and informative post. AA Meetings Locator

ReplyDeleteThe article was up to the point and described the information about education and learning. Thanks to blog author for wonderful and informative post. Business Capital Loans

ReplyDeleteThe article was up to the point and described the information about education and learning. Thanks to blog author for wonderful and informative post. halfway houses near me

ReplyDeleteThe article was up to the point and described the information about education and learning. Thanks to blog author for wonderful and informative post. CBD Products

ReplyDeleteThe article was up to the point and described the information about education and learning. Thanks to blog author for wonderful and informative post. wholesale CBD supplements

ReplyDeleteThe article was up to the point and described the information about education and learning. Thanks to blog author for wonderful and informative post. Alternative Supplements Blog

ReplyDeletewonderfull and informative blog post really very helpfull.

ReplyDeletehttps://vocal.media/01/richart-ruddie-annuity-views-on-importance-of-digital-marketing

every point in the article is described well i appreciate your work thanku.

ReplyDeletehttps://theblogulator.com/richart-ruddie-annuity-reviews-on-a-telemarketing-agency/

i like you blog and find it informative about student point of view.

ReplyDeletehttps://sketchfab.com/Richart.Ruddie.Annuity

Your creative potential seems limitless.

ReplyDeletehttps://keyposting.com/simplest-ecommerce-website-builder-richart-ruddie-annuity/

You're always learning new things and trying to better yourself. That's awesome.

ReplyDeletehttps://www.dorjblog.com/richart-ruddie-annuity-describes-telemarketings-pros-and-cons/

I commend you for your thorough work. good working

ReplyDeletehttps://postpear.com/e-commerce-web-site-builder-by-richart-ruddie-annuity/

patch.com

A well-developed theme!

ReplyDeletehttps://vocal.media/01/richart-ruddie-annuity-views-on-importance-of-digital-marketing

Bpautosparesindia.com -

ReplyDeleteComplete Online Tata Spare Parts Catalog, tata auto spare parts shopping IndiaBut the furious and fast pace at which technology grew brought about a sea-change in the very perspective of website design and development. Website Developers

ReplyDeleteThank you so much for this!!! I am currently in school to get my degree for Early Childhood Education and I absolutely LOVE this idea! Thank you so much for the inspiration!

ReplyDelete야동

대딸방

스포츠마사지

출장마사지

바카라사이트

Maintenance of website performance and uptime 24*7 is certainly impossible for an individual, this is where the monitoring tools come into play. hoepli it

ReplyDeleteI went over this internet site and I think you have a lot of great info , saved to favorites. 토토사이트

ReplyDeleteIf you are unable to halt your car without killing the engine, your

ReplyDeleteSuzuki Clutch Partshave become damaged. Order your replacements now and save your Suzuki car.Suzuki Suspension Partstend to wear out with time. But don't wait for complete damage. Restore ride quality and smoothen all ride bumps with our spare parts.Genuine and robust

Suzuki Gear Partsfor all Suzuki cars . Check out our vast list of Suzuki Spare Parts and aftermarket replacement parts here at BP Auto Spares India.Get the smooth driving feel of your Suzuki car as when it was new. Make every turn smooth with BP Auto Spares India tried and trusted

Suzuki Steering Parts.Suzuki Propeller Shaft Parts: When your Suzuki car’s propeller shaft fails, it can detriment the propulsion function capacity. So, be on the alert for steel-to-steel contact, and get your spares always ready.Genuine and robust

Suzuki Various Pipes and Hosesfor all Suzuki cars . Check out our vast list of Suzuki Spare Parts and aftermarket replacement parts here at BP Auto Spares India.Genuine and robust

Suzuki Other Partsfor all Suzuki cars . Check out our vast list of Suzuki Spare Parts and aftermarket replacement parts here at BP Auto Spares India.This comment has been removed by the author.

ReplyDeleteThough many aspects of website design differ from site to site, many things remain the same throughout the majority of websites on the internet. Most notably is the navigation or menu. The way in which a website's menu works and looks is very important, as ultimately, visitors to a website are looking for certain criteria that will make them either stay and interact or leave. web design dubai

ReplyDeleteLooking for top-quality

ReplyDeleteTata 713 Parts? Look no further! We offer a vast selection of reliable and affordable Tata 713 parts to meet all your needs. Browse our inventory today and experience the difference with our exceptional service and quick delivery. Shop now for Tata 713 Parts and get your vehicle back on the road in no time.Shortest Path in a Store: A Simple Explanation

ReplyDeleteThis blog post dives into finding the shortest path for customers to collect items in a store with pickup points. Here's a simplified explanation:

Imagine a store map:

Blue dot: Starting point (where you begin)

Green dot: Checkout (where you pay)

Red dots: Item locations

Black dots: Other points in the store

The goal: Find the quickest way to collect all items before reaching the checkout.

The method:

Start from the beginning: Use Dijkstra's algorithm (like Google Maps!) to find the closest item (red dot).

Collect and repeat: Go to that item, then find the next closest unvisited item from there. Repeat until all items are collected.

Head to checkout: Finally, find the shortest path from the last item to the checkout (green dot).

The code:

visit my blog: https://blitzacademy.org/coursedetail.php?course_cat=2&course_id=9&logistics-and-supply-chain-management-courses-in-kerala

The blog post includes Java code for implementing this logic, but the core idea is simple: find the closest item each time, considering other points in the store if needed.

Key points:

This method uses Dijkstra's algorithm for efficiency.

It considers all possible paths to find the shortest one.

The code provided demonstrates the implementation.

I hope this simplified explanation helps! Let me know if you have any further questions.