A C++ Traffic Navigation System that calculates optimal routes in a city network using Dijkstra's and A* algorithms.
- Graph-based Map: Models intersections as nodes and roads as weighted edges.
- Pathfinding: Supports Dijkstra and A* algorithms.
- Dynamic Routing:
- Fastest Route (Time-based, considers traffic).
- Shortest Route (Distance-based).
- Traffic Simulation:
- Update traffic levels (Low, Medium, High).
- block/unblock roads.
- Persistence: Save and load map data from CSV files.
include/: Header files.src/: Source code.data/: Sample CSV data (nodes.csv, roads.csv).
classDiagram
class App {
-Graph graph
-unique_ptr~Router~ router
-unique_ptr~TrafficManager~ trafficManager
+run()
}
class Graph {
-unordered_map~int, Node~ nodes
-unordered_map~int, vector~Edge~~ adjacencyList
+addNode(Node)
+addEdge(Edge)
+getOutgoingEdges(int)
}
class Node {
+int id
+string name
+double x, y
+distanceTo(Node)
}
class Edge {
+int sourceId, destId
+double distanceKm
+TrafficLevel trafficLevel
+getEffectiveTime()
}
class Router {
-Graph& graph
+findShortestPathDijkstra()
+findShortestPathAStar()
}
class TrafficManager {
-Graph& graph
+updateTrafficLevel()
+blockRoad()
}
App --> Graph : Owns
App --> Router : Uses
App --> TrafficManager : Uses
Router ..> Graph : Reads
TrafficManager ..> Graph : Modifies
Graph *-- Node
Graph *-- Edge
graph TD
User([User])
CLI[App CLI Interface]
TM[Traffic Manager]
Router[Router Engine]
Graph[Graph Data Structure]
FileSys[(CSV Files)]
User -->|Commands| CLI
CLI -->|Load/Save| FileSys
FileSys <-->|Parsing| Graph
CLI -->|Update Traffic| TM
TM -->|Modify Weights| Graph
CLI -->|Find Route| Router
Router -->|Query Nodes/Edges| Graph
Graph -->|Return Path Cost| Router
Router -->|Return Optimal Path| CLI
CLI -->|Display Result| User
- C++17 compliant compiler.
- CMake (3.10+).
- Create a build directory:
mkdir build cd build - Generate build files:
cmake ..
- Compile:
cmake --build . - Run:
Note: Ensure you run the executable from the project root (where
./RouteNavigator # On Windows: RouteNavigator.exedata/folder is located) or move thedata/folder tobuild/.
- nodes.csv:
id,name,x,y - roads.csv:
src,dest,distance,time,type- Types: 0 (Local), 1 (Highway), 2 (Expressway).