Đề: Cho một giả đồ thị vô hướng G = (V, E) có N đỉnh. Hãy viết chương trình kiểm tra
xem G có liên thông hay không.
Input:
- Tên file: “lienthong.inp”
- Trong file này, dòng đầu tiên là số N, N dòng tiếp theo là ma trận kề cấp N.
Output: in kết quả ra màn hình và ra file “lienthong.out”.
Ý tưởng thuật toán:Bước 1: xuất phát từ một đỉnh bất kỳ của đồ thị. Ta đánh dấu đỉnh xuất phát và chuyển sang Bước 2.Bước 2: từ một đỉnh i đã đánh dấu, ta đánh dấu đỉnh j nếu A[i,j] = 1 và j chưa được đánh dấu và chuyển sang Bước 3.Bước 3: thực hiện Bước 2 cho đến khi không còn thực hiện được nữa chuyển sang Bước 4.Bước 4: kiểm tra nếu số đỉnh đánh dấu nhỏ hơn n (hay tồn tại ít nhất một đỉnh chưa được đánh dấu) đồ thị sẽ không liên thông và ngược lại đồ thị liên thông.
- #include<iostream>
- #include<fstream>
- using namespace std;
- bool xet_tinh_lien_thong(int arr[][100], int n);
- int main()
- {
- ifstream file_in("lienthong.inp", ios_base::in);
- ofstream file_out("lienthong.out", ios_base::out);
- int arr[100][100];
- int n;
- file_in >> n; // doc n
- for(int i =0;i<n;i++) // doc mang
- {
- for(int j=0;j<n;j++)
- {
- file_in >> arr[i][j];
- }
- }
- // xuat mang
- cout<<n<<endl;
- for(int i =0;i<n;i++)
- {
- for(int j=0;j<n;j++)
- {
- cout<<arr[i][j]<< " ";
- }
- cout<<endl;
- }
- if(xet_tinh_lien_thong(arr,n))
- {
- cout<<"Day la do thi lien thong";
- file_out << "Day la do thi lien thong";
- }
- else
- {
- cout<<"Day la do thi khong lien thong";
- file_out << "Day la do thi khong lien thong";
- }
- return 0;
- }
- bool xet_tinh_lien_thong(int arr[][100], int n)
- {
- int danh_dau[n];
- danh_dau[0] = 1; // danh dau gia tri dau tien la 1
- int dem_so_dinh_duoc_danh_dau = 1;
- for(int i=1;i<n;i++)
- {
- danh_dau[i] = 0; // khoi tao gia tri cho cac bien danh_dau = 0;
- }
- for(int i =0; i<n;i++)
- {
- for(int j=0;j<n;j++)
- {
- if(arr[i][j] == 1 && danh_dau[j] == 0 ) // neu arr[i][j] == 1 va dinh j chua dc danh dau thi danh dau dinh do
- {
- danh_dau[j] = 1;
- dem_so_dinh_duoc_danh_dau++;
- }
- }
- }
- cout<<"so dinh dc danh dau = "<<dem_so_dinh_duoc_danh_dau<<endl;
- if(dem_so_dinh_duoc_danh_dau == n)
- {
- return true;
- }
- else
- {
- return false;
- }
- }