[Thuật toán DFS, BFS] Cài đặt thuật toán duyệt đồ thị - DFS, BFS [Đô thị]

 Cài đặt thuật toán duyệt đồ thị - DFS, BFS trong lý thuyết đồ thị

http://adf.ly/e5LU6

Yêu cầu:
 - Đọc file "D:\\G.txt" chứa ma trận kề biểu diễn đơn đồ thị vô hướng G, có dạng sau:

Ví dụ:
4
0 1 0 1
1 0 1 1
0 1 0 0
1 1 0 0
 
Trong đó:
 + Dòng đầu tiên là số đỉnh
 + Các dòng còn lại biểu diễn ma trận kề của đồ thị G

- In ma trân kề vừa đọc được
- Duyệt đồ thị với thuật toán DFS, BFS. In kết qua ra màn hình
- Đếm số thành phần liên thông
- Kiểm tra xem đồ thị có phải là Euler không ?

Code [ Dev - C++ ]:

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <values.h>
#define max 100

#define FileIn "D:\\G.txt"

using namespace std;
int chuaXet[max];

// A: ma tran ke cua G, n: so dinh
int A[max][max],n;

// doc file chua do thi G luu vao ma tran A


void Doc_File(int A[max][max], int &n) {
 FILE *f = fopen(FileIn,"rb");
 fscanf(f,"%d",&n);
 cout<<"\n So dinh: "<<n<<"\n Ma tran ke: "<<endl;
 for(int i =0;i<n;i++) {
   for(int j =0;j<n;j++) {
     fscanf(f,"%d",&A[i][j]);
  cout<<A[i][j]<<" ";
}
cout<<endl;
}
fclose(f);
}

// Khoi tao chua xet
void KhoiTao_ChuaXet(){
  for (int i=0;i<max;i++)
   chuaXet[i]=1;
 }

// thuat toan DFS
void DFS(int u){
// xet dinh u
 chuaXet[u]=0;
 cout<<u<<"->";
 for(int v=0;v<n;v++)
   if(chuaXet[v]==1&&A[u][v]==1)
   {
     DFS(v);
    }
 }


// thuat toan BFS

void BFS(int u){
  int queue[max], dau=0,cuoi=0;
  for(int i=0;i<max;i++) queue[i]=0;
    queue[cuoi]=u;
    chuaXet[u]=0;
    cout<<u<<"->";
 
while(dau>=cuoi)
 {
    int p=queue[cuoi];
    cuoi++;
   for(int v=0;v<n;v++)
     if(chuaXet[v]==1&&A[p][v]==1)
      { 
        dau++;
        queue[dau]=v;
        chuaXet[v] =0;
        cout<<v<<"->";
      }
   }
}

// Kiem tra chuaXet
int KT_ChuaXet(){
  for (int i=0;i<n;i++)
     if (chuaXet[i]==1) return i;
return -1;
}


// Dem so thanh phan lien thong

int DemSLT(){
 int slt=0;
 KhoiTao_ChuaXet();
 while (KT_ChuaXet()!=-1)
 {
    int i=KT_ChuaXet();
    DFS(i);
    slt++;
 }
 cout<<"\n So lien thong: "<<slt;
return slt;
}

// tim bac cac dinh
int Deg(int i){
   int deg=0;
   for(int j=0;j<n;j++)
   {
      deg +=A[i][j];
    }
   return deg;
 }


// Kiem tra do thi Euler

void Test_Euler(){
   if (DemSLT()==1){
      // tim bac cua do thi
      int soDinhLe=0;
      for (int i=0;i<n;i++)
         if(Deg(i)%2!=0)
              soDinhLe++;
     if (soDinhLe==0)
           cout<<"\n Do thi la Euler";
     else
             if (soDinhLe==2)
                cout<<"\n Do thi la nua Euler";
            else
                 cout<<"\n Do thi khong phai Euler";
   }
else
    cout<<"\n Do thi khong la Euler";
}

// ham chinh

int main() {
 // doc ma tran
 Doc_File(A,n);
 // Duyet do thi DFS
 KhoiTao_ChuaXet();
 cout<<"\n Duyet do thi DFS: ";
 DFS(0);
 // Duyet do thi BFS
 KhoiTao_ChuaXet();
 cout<<"\n Duyet do thi BFS: ";
 BFS(0);

 // Dem so lien thong
 DemSLT();

 // Kiem tra Euler
 Test_Euler();
return 0;
}




--------------------------
Kế quả:

So dinh: 4
Ma tran ke:
0 1 0 1
1 0 1 1
0 1 0 0
1 1 0 0

Duyet do thi DFS: 0->1->2->3->
Duyet do thi BFS: 0->1->3->2->
--------------------------------

* Có thể bản quan tâm: [MMO] Hướng Dẫn *Kiếm Tiền Tự Động* Với Các Ứng Dụng Treo Máy *CỰC KỲ ĐƠN GIẢN VÀ HIỆU QUẢ*

Categories

AI (13) AI programming (1) ASP (1) Android (31) App Honeygain (4) Assembly (17) Biểu diễn thuật toán (1) Bubble-Sort (1) Bài giảng (2) Bài giảng lập trình C và Cpp (21) Bài viết hay (104) Bản đồ tư duy (1) C Plus Plus (103) C/C++ (16) CDSL phân tán (1) CSS (2) Cơ sở dữ liệu (11) Danh ngôn lập trình (1) Datamining (4) Genetic Algorithm (1) Giáo trình (2) Giải thuật tiến hóa - thuật toán di truyền (2) Google App Engine (2) Góc học tập (34) HTML (1) Hướng dẫn kiếm tiền online tại nhà (6) Hướng dẫn sử dụng Emu8086 (1) Học lập trình (131) Học lập trình C và CPP qua ví dụ (17) Java (54) Java Căn bản (6) JavaScript (5) Kỹ năng đọc hiệu quả (1) Kỹ thuật lập trình (16) Kỹ thuật đồ họa máy tính (10) Lý thuyết Cơ sở dữ liệu (2) Lý thuyết đồ thị (11) Lập trình Cơ sở dữ liệu (2) Lập trình Python (2) Lập trình căn bản (8) Lập trình hướng đối tượng với Java (7) Lập trình mobile (7) Lập trình mạng (6) Lập trình nhúng (1) Lập trình trí tuệ nhân tạo (2) ML (1) MMO (6) MS Access (1) Machine learning (2) Mạng máy tính (1) Mẹo tìm kiếm trên Google (1) Nghiên cứu khoa học (2) Ngôn ngữ lập trình (2) Những cuốn sách hay mà bạn nên đọc khi còn trẻ (1) Pascal (3) Phương pháp tính toán tối ưu (2) Phương pháp tối ưu (2) Quản lý dự án CNTT (1) SEO (1) SQL (5) Swift (9) Sách hay (4) Thiết kế Web (2) Thuật toán (51) Thuật toán Sắp Xếp -Sort (9) Thuật toán Tìm kiếm - Search (5) Thuật toán di truyền (4) Thực hành Android (2) Tin học văn phòng (5) Tiện ích máy tính (3) Toán rời rạc (13) Treo máy kiếm tiền (3) Trí tuệ nhân tạo (18) Tài liệu tham khảo (4) Tìm hiểu Blockchain (2) Tự học Android (3) Tự học Android qua ví dụ (1) Tự học JavaScript (1) Tự học lập trình (7) Tự học lập trình Android (17) Tự học lập trình C và CPP (14) Tự học lập trình java qua các ví dụ (8) XML (1) blockchain (2) bài giảng quản lý dự án CNTT (1) bài tập java (3) bài tập lập trình (4) cấu trúc dữ liệu giải thuật (15) hướng dẫn viết báo (1) học lập trình Java (11) học máy (5) hợp ngữ (8) lập trình viên (3) phưng pháp đơn hình (2) thuật toán AI (2) tài liệu CNTT miễn phí (3) tính toán tối ưu (1) tự học lập trình iOS (8) tự học lập trình python (1) ví dụ Assembly (1) Đại số gia tử và ứng dụng (1) Đồ họa (4)