గ్రాఫ్ సెర్చ్ అల్గోరిథం అనేది గ్రాఫ్ ప్రాసెసింగ్ మరియు ఇన్ఫర్మేషన్ రిట్రీవల్ రంగంలో ఒక ప్రాథమిక సాంకేతికత. ఈ అల్గారిథమ్ నిర్దిష్ట నియమాలు లేదా శోధన అల్గారిథమ్ల ఆధారంగా గ్రాఫ్లో పాత్లు లేదా భాగాలను కనుగొనేలా చేస్తుంది.
అది ఎలా పని చేస్తుంది
- గ్రాఫ్లోని నిర్దిష్ట శీర్షం(నోడ్) నుండి ప్రారంభించండి.
- డెప్త్-ఫస్ట్ సెర్చ్(DFS) లేదా బ్రెడ్త్-ఫస్ట్ సెర్చ్(BFS) వంటి నిర్దిష్ట నియమాల ఆధారంగా శోధన ప్రక్రియను నిర్వహించండి.
- లక్ష్యం లేదా వస్తువులను కనుగొనడం కోసం శోధించడానికి గ్రాఫ్ యొక్క శీర్షాలు మరియు అంచులను దాటండి.
- మార్గం లేదా శోధన ఫలితాలను రికార్డ్ చేయండి.
ఉదాహరణ
కింది గ్రాఫ్ను పరిగణించండి:
A -- B -- C -- E
| |
D --------
మేము డెప్త్-ఫస్ట్ సెర్చ్(DFS) అల్గారిథమ్ని ఉపయోగించి ఈ గ్రాఫ్లో శీర్షం A నుండి శీర్షం E వరకు మార్గాన్ని కనుగొనాలనుకుంటున్నాము.
- శీర్షం A వద్ద ప్రారంభించండి.
- శీర్షం Bకి తరలించండి.
- శీర్షం Cకి కొనసాగండి.
- Cలో పొరుగువారు లేరు, B శీర్షానికి బ్యాక్ట్రాక్ చేయండి.
- శీర్షం Dకి తరలించండి.
- శీర్షం Aకి కొనసాగండి(D Aకి కనెక్ట్ చేయబడింది).
- శీర్షం Bకి తరలించండి.
- శీర్షం Cకి తరలించండి.
- 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;
}
ఈ ఉదాహరణలో, గ్రాఫ్లో శీర్షం A నుండి శీర్షం E వరకు ఉన్న మార్గాన్ని కనుగొనడానికి మేము DFS అల్గారిథమ్ని ఉపయోగిస్తాము. ఫలితంగా A నుండి E వరకు మార్గం ఏర్పడే శీర్షాల క్రమం ఉంటుంది.