Mô tả bài toán:
Cho đồ thị vô hướng G=(V,E) hãy đếm số thành phần liên thông của đồ thị G.
Ý tưởng thuật toán:
Bước 0: khởi tạo số thành phần liên thông bằng 0.
Bước 1: xuất phát từ một đỉnh chưa được đánh dấu của đồ thị. Ta đánh dấu đỉnh xuất phát, tăng số thành phần liên thông lên 1 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: nếu số số đỉnh đánh dấu bằng n kết thúc thuật toán, ngược lại quay về Bước 1.
Mô tả dữ liệu đầu vào và đầu ra của bài toán:
Dữ liệu vào: cho trong tập tin Bai1.inp
- Dòng đầu ghi số n là số đỉnh của một đồ thị (0<n<100).
- Dòng i+1 (1 < i < n ) chứa n số A[i,1],A[i,2]…A[i,n] mỗi số cách nhau bởi một khoảng trắng.
Dữ liệu ra: xuất ra màn hình số thành phần liên thông của đồ thị.
Ví dụ:
[ Cài đặt bài toán - code Turbo C++]
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
//doc du lieu tu tap tin
void Doc_File(int **A,int &n) {
FILE*f = fopen("Input.txt","rb");
fscanf(f,"%d",&n);
*A = new int [n];
cout<<"Ma Tran Lien Ket Cua Do Thi";
for(int i =0;i<n;i++) {
A[i] = new int [n];
cout<<endl;
for(int j =0;j<n;j++) {
fscanf(f,"%d",&A[i][j]);
cout<<" "<<A[i][j];
}
}
fclose(f);
}
//ham tra ve so thanh phan lien thong cua do thi
int TPLien_Thong(int **A, int n) {
char*DanhDau = new char [n];
char ThanhCong;
int Dem=0, i,j, MLT=0;
for( i = 0; i<n; i++) //khoi tao cac dinh chua danh dau
DanhDau[i] = 0;
do {
j = 0;
while(DanhDau[j]==1) //tim 1 dinh chua duoc danh dau
j++;
DanhDau[j] = 1; //danh dau dinh tim duoc
Dem++; //tang so dinh danh dau len 1
MLT++; //tang so thanh phan lien thong len 1
do {
ThanhCong =0;
for(i = 0; i<n; i++)
if(DanhDau[i]==1)
for(j = 0; j<n; j++)
if (DanhDau[j] == 0 && A[i][j] > 0) {
DanhDau[j] = 1;
ThanhCong =1;
Dem++;
if(Dem == n) return MLT;
}
}while (ThanhCong == 1);
} while(Dem<n); //lap lai khi con dinh chua duoc danh dau
return MLT;
}
//chuong trinh chinh
void main() {
clrscr();
int **A,n;
Doc_File(A,n);
cout<<"\nTHANH PHAN LIEN THONG: "<<TPLien_Thong(A,n);
delete *A;
getch();
}
Thứ Tư, 5 tháng 3, 2014
Đăng ký:
Đăng Nhận xét (Atom)
Bài đăng phổ biến
-
HTsoft POS .NET là phần mềm quản lý Kho-Bán hàng và Chăm sóc khách hàng chuyên nghiệp, áp dụng tốt cho nhiều lĩnh vực kinh doanh khác nhau ...
-
Công cụ Đăng Ký Bản Quyền Sử Dụng Kế Toán Smart Pro ( 2.0 - 2.5 - 3.0) Video Hướng Dẫn Đăng Ký Bản Quyền Kế Toán Smart Pro (2.0 - 2.5 - 3.0)...
-
Có thể xài được nhưng cũng có thể không xài được nếu như chủ nhân đã đổi pass. Acc: hoanglinh1714 Pass: A01656101024LINH Acc: hieukenpt19999...
-
Bổ sung vào các chức năng đã có ở hai phiên bản trước, phần mềm Quản lý gia phả phiên bản Advanced được nâng cấp thêm các tính năng nổi trội...
-
Phần mềm quản lý bán hàng TTV Sales là giải pháp giúp các doanh nghiệp quản lý các chuỗi cửa hàng, sản phẩm, nhân viên một cách có hệ thống ...
-
PHẦN MỀM QUẢN LÝ NHÂN SỰ (Perfect HRM 2012) cung cấp giải pháp tổng thể trong lĩnh vực quản lý nhân sự, tiền lương. Phần mềm hỗ trợ những tí...
-
Gia tộc 4.6 Một số thay đổi nhỏ giao diện. Thêm chức năng cập nhật chi phái hàng loạt. Thay đổi mẫu xuất hồ sơ thành viên đủ tốt để in ấn. ...
-
Các vụ trộm cắp, giết người, khủng bố, phân biệt chủng tộc, bạo hành khiến con người đứng trước nguy cơ một thế giới không hòa bình. Cùng tì...
-
Phòng tránh "lỗi màn hình xanh" trên Windows 8 Vấn đề “màn hình xanh” dẫn tới treo máy hay thậm chí tổn hại đến cả phần cứng và ph...
-
Những số liệu thú vị về sự tương tác của người dùng với nội dung post lên Facebook Một khi đã đăng trạng thái lên Facebook thì ít nhiều các ...


0 nhận xét:
Đăng nhận xét