Recent Posts

Code C/C++: Đếm số thành phần liên thông của đồ thị

-
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ố đỉ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 Bai2.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 chương trình:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define TenFile "Bai2.inp"
//Đọc dữ liệu từ file Bai2.inp
void Doc_File(int **A,int &n)  {
FILE*f = fopen(TenFile,"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);
}
//Hàm trả về số thành phần liên thông của đồ thị
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++)     
DanhDau[i] = 0;
do {
j = 0;
while(DanhDau[j]==1) 
j++;
DanhDau[j] = 1;   
Dem++;     
MLT++;      
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);     
return MLT;
}
//Chương trình chính
void main(){
clrscr();
int **A,n;
Doc_File(A,n);
cout<<"\nThanh phan lien thong: "<<TPLien_Thong(A,n);
delete *A;
getch();
}
Kết quả chạy chương trình:
Từ khóa: c, c++, toán rời rạc, liên thông, đồ thị, kỹ thuật lập trình, giải thuật, đếm thành phần liên thông của đồ thị

Related Post:

  • HTML: Tạo danh sách trên trang web1. DANH SÁCH KHÔNG CÓ THỨ TỰ (Unorder List -UL) Cú pháp:<UL Type= Shape1>        <LI Type= Shape 2> Nội dung 1        <LI Type= Shape 2> Nội dung 2            …</UL>- Shape 1, Shape 2 là loại bullet tự động đặt ở đầu dòng trong danh sách-  Shape 1: ảnh hưởng đế… Read More
  • HTML: Thẻ tạo bảng trong thiết kế Web1. BẢNG (TABLE)Bảng thường được sử dụng để tạo các văn bản nhiều cột hoặc phân chia trang thành nhiều vùng khác nhau rất tiện lợi trong thiết kế và trình bày trang webCú pháp:<TABLE ><TR><TD>Nội dung trong ô 1</TD>   !-… Read More
  • Cài đặt: Hướng dẫn cài đặt Visual Studio 2005 (hình ảnh)Bước 1: Đưa đĩa DVD vào ổ đĩa của máy tính, nếu Autorun được bật, quá trình cài đặt sẽ hiển thị các lựa chọn trên màn hình. Ngược lại, các bạn phải click vào file Setup trong bộ cài để cài đặt bằng tay. Màn hình lựa chọn cài đặt xuất hiện như hình dưới, lựa chọn Instal Visual Studio để bắt đầu quá trình cài đặt:Bước 2: Quá trình này sẽ copy các file cài đặt cần thiết … Read More
  • Cài đặt: Hướng dẫn cài đặt Visual Studio 2008 (hình ảnh)Bước 1: Mở thư mục chứa tệp visual2008.iso –> Nháy phải chuột vào tên tệp –> Chọn PowerISO –> Chọn Mount Image to Drive ….(Bước này có thể bỏ qua nếu chúng ta có bộ cài từ DVD hoặc trong một thư mục)Bước 2: Mở ổ đĩa DVD (Ví dụ ổ F:) –> Nháy đúp chuột vào tệp chương trình cài đặtBước 3: Chọn Install Visual Studio 2008 –> Chọn Next để bắt đầu cài đặt… Read More
  • HTML: Chèn hình ảnh vào trang Web1. Các loại ảnh :a. Ảnh Gif (Graphics Interchange Format): được sử dụng phổ biến nhất trong các tài liệu HTML, dễ chuyển tải, ngay cả các kết nối sử dụng MODEM tốc độ chậm, hổ trợ 256 màu GIF. Các file GIF được định dạng không phụ thuộc phần nềnb. Ảnh JPEG (Joint PhotoGraphic Expert Group) có phần mở rộng .JPG, là loại ảnh nén mất thông tin, nghĩa là ảnh sau… Read More
  • HTML: Tạo Frame sử dụng ngôn ngữ HTML1.1. KHÁI QUÁT VỀ FRAME- Có thể phân chia một trang thành các khung, cho phép người truy cập cùng một lúc có thể xem nhiều trang mà không cần cuộn màn hình, mỗi khung chứa một trang Web riêng.- Nếu tài trang sử dụng Frame thì không sử thẻ Body1.2. CÁCH TẠO MỘT FRAME LAYOUT<HTML><HEAD>                  <TITLE&… Read More




Klik untuk melihat kode: :) =( :s :D :-D ^:D ^o^ 7:( :Q :p T_T @@, :-a :W *fck* x@