ग्राफ खोज एल्गोरिथ्म ग्राफ प्रशोधन र जानकारी पुन: प्राप्ति को क्षेत्र मा एक आधारभूत प्रविधि हो। यो एल्गोरिदमले हामीलाई विशिष्ट नियम वा खोज एल्गोरिदमहरूमा आधारित ग्राफमा पथ वा कम्पोनेन्टहरू फेला पार्न सक्षम बनाउँछ।
यो कसरी काम गर्दछ
- ग्राफमा एक विशिष्ट vertex(नोड) बाट सुरु गर्नुहोस्।
- डेप्थ-फर्स्ट सर्च(DFS) वा Breadth-First Search(BFS) जस्ता विशिष्ट नियमहरूमा आधारित खोज प्रक्रिया गर्नुहोस्।
- लक्ष्य वा वस्तुहरू खोज्नको लागि ग्राफको ठाडो र किनारहरू पार गर्नुहोस्।
- पथ वा खोज परिणामहरू रेकर्ड गर्नुहोस्।
उदाहरण
निम्न ग्राफलाई विचार गर्नुहोस्:
A -- B -- C -- E
| |
D --------
हामी गहिराई-पहिलो खोज(DFS) एल्गोरिथ्म प्रयोग गरेर यस ग्राफमा vertex A देखि vertex E सम्मको बाटो खोज्न चाहन्छौं।
- vertex A मा सुरु गर्नुहोस्।
- vertex B मा सार्नुहोस्।
- vertex C मा जारी राख्नुहोस्।
- C मा कुनै छिमेकीहरू छैनन्, भर्टेक्स B मा ब्याकट्र्याक।
- vertex D मा सार्नुहोस्।
- vertex A मा जारी राख्नुहोस्(जसरी D A मा जोडिएको छ)।
- vertex B मा सार्नुहोस्।
- vertex C मा सार्नुहोस्।
- vertex E मा सार्नुहोस्।
A देखि E सम्मको बाटो A -> B -> C -> E हो।
C++ मा उदाहरण कोड
#include <iostream>
#include <vector>
#include <stack>
#include <unordered_map>
class Graph {
public:
void addEdge(char from, char to);
std::vector<char> depthFirstSearch(char start, char end);
private:
std::unordered_map<char, std::vector<char>> adjList;
};
void Graph::addEdge(char from, char to) {
adjList[from].push_back(to);
adjList[to].push_back(from);
}
std::vector<char> Graph::depthFirstSearch(char start, char end) {
std::vector<char> path;
std::unordered_map<char, char> parent;
std::stack<char> stack;
stack.push(start);
parent[start] = '\0';
while(!stack.empty()) {
char current = stack.top();
stack.pop();
if(current == end) {
// Build the path from end to start using the parent map
char node = end;
while(node != '\0') {
path.insert(path.begin(), node);
node = parent[node];
}
break;
}
for(char neighbor: adjList[current]) {
if(parent.find(neighbor) == parent.end()) {
parent[neighbor] = current;
stack.push(neighbor);
}
}
}
return path;
}
int main() {
Graph graph;
graph.addEdge('A', 'B');
graph.addEdge('A', 'D');
graph.addEdge('B', 'C');
graph.addEdge('C', 'E');
graph.addEdge('D', 'B');
char start = 'A';
char end = 'E';
std::vector<char> path = graph.depthFirstSearch(start, end);
std::cout << "Path from " << start << " to " << end << ": ";
for(char node: path) {
std::cout << node << ";
}
std::cout << std::endl;
return 0;
}
यस उदाहरणमा, ग्राफमा vertex A देखि vertex E सम्मको बाटो पत्ता लगाउन हामी DFS एल्गोरिदम प्रयोग गर्छौं। नतिजा A देखि E सम्मको बाटो बनाउने ठाडोहरूको अनुक्रम हुनेछ।