Tìm kiếm theo chiều sâu trong C
Sau khi đã theo dõi phần giải thuật trong chương trước, trong chương này chúng ta sẽ cùng tìm hiểu phần triển khai code trong ngôn ngữ C của giải thuật Tìm kiếm theo chiều sâu.
Tìm kiếm theo chiều sâu trong C
#include#include #include #define MAX 5struct Vertex { char label; bool visited; };//khai bao cac bien cho ngan xep (stack)int stack[MAX]; int top = -1; //khai bao cac bien lien quan toi do thi (graph)//khai bao danh sach cac dinh (Vertex) struct Vertex* lstVertices[MAX];//Khai bao mot ma tran ke (adjacency matrix) int adjMatrix[MAX][MAX];//khai bao mot bien de dem so dinh int vertexCount = 0;//cac ham thao tac voi ngan xepvoid push(int item) { stack[++top] = item; } int pop() { return stack[top--]; } int peek() { return stack[top]; }bool isStackEmpty() { return top == -1; }//cac ham thao tac tren do thi//them dinh vao danh sach cac dinh void addVertex(char label) { struct Vertex* vertex = (struct Vertex*) malloc(sizeof(struct Vertex)); vertex->label = label; vertex->visited = false; lstVertices[vertexCount++] = vertex; }//them canh vao mang cac canh void addEdge(int start,int end) { adjMatrix[start][end] = 1; adjMatrix[end][start] = 1; }//hien thi dinh void displayVertex(int vertexIndex) { printf("%c ",lstVertices[vertexIndex]->label); } //lay dinh chua duyet tu ma tran ke int getAdjUnvisitedVertex(int vertexIndex) { int i; for(i = 0; i visited == false) { return i; } } return -1; }void depthFirstSearch() { int i; //danh dau nut dau tien (first node) la da duyet (visited) lstVertices[0]->visited = true; //hien thi dinh displayVertex(0); //chen chi muc cua dinh vao trong ngan xep push(0); while(!isStackEmpty()) { //Rut dinh chua duoc duyet tu ngan xep int unvisitedVertex = getAdjUnvisitedVertex(peek()); //khong tim thay dinh lien ke if(unvisitedVertex == -1) { pop(); }else { lstVertices[unvisitedVertex]->visited = true; displayVertex(unvisitedVertex); push(unvisitedVertex); } } //ngan xep la trong, hoan thanh tim kiem, reset gia tri cua visited for(i = 0;i < vertexCount;i++) { lstVertices[i]->visited = false; } } int main() { int i, j; for(i = 0; i Kết quả
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Bài học Cấu trúc dữ liệu và giải thuật phổ biến tại hoconline.club:
- Giải thuật tiệm cận - Asymptotic Algorithms
- Cấu trúc dữ liệu mảng (Array)
- Danh sách liên kết - Linked List
- Cấu trúc dữ liệu ngăn xếp - Stack
- Cấu trúc dữ liệu hàng đợi - Queue
- Tìm kiếm tuyến tính - Linear Search
- Tìm kiếm nhị phân - Binary Search
- Sắp xếp nổi bọt - Bubble Sort
- Sắp xếp chèn - Insertion Sort
giai-thuat-tim-kiem-theo-chieu-sau.jspBài viết liên quan