Recent Posts

Code C/C++: Xét tính liên thông của đồ thị

-
Xét tính liên thông của đồ thị
Mô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy kiểm tra tính liên thông của đồ thị G.
Ý 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.
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: thông báo kết quả ra màn hình ”DO THI LIEN THONG” hay “ DO THI KHONG LIEN THONG”.


Cài đặt chương trình:
#include<math.h>
#include<iostream>
#include<conio.h>
#include<stdio.h>
#define tenfile "bai1.txt"
using namespace std;
//Hàm đọc file
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);
}
//kiem tra tinh lien thong neu lien thong tra ve gia tri 1 nguoc lai tra ve gia tri 0
char Lien_Thong(int **A,int n){
char *DanhDau = new char [n];
char ThanhCong;
int Dem=0;
for(int i = 0; i<n; i++)    //Khoi tao moi dinh chua danh dau
DanhDau[i] = 0;
DanhDau[0] = 1;    //danh dau dinh dau
Dem++;      //dem so dinh duoc danh dau
do {
ThanhCong =1;  //khong con kha nang loang
for(int i = 0; i<n; i++)
if(DanhDau[i]==1){
for(int j = 0; j<n; j++)
if (DanhDau[j] == 0 && A[i][j] > 0){
DanhDau[j] = 1;
ThanhCong = 0;  //con kha nang loang
Dem++;
if(Dem == n) 
return 1; 
}
}
}while (ThanhCong == 0);  //lap lai cho den khi khong con kha nang loan
return 0;
}
//Chuong trinh chinh
int main(){
int **A,n;
Doc_File(A,n);
if (Lien_Thong(A,n)==1)
cout<<"\nDO THI LIEN THONG";
else 
cout<<"\nDO THI KHONG LIEN THONG";
delete *A;
getch();
return 0;

}
Kết quả chạy chương trình:

Từ khóa: Đồ thị, liên thông, graphics, toán rời rạc, kỹ thuật lập trình, c, c++

Related Post:

  • VBA: Cấu trúc For Each … NextCú pháp:For Each phần_tử  In nhóm      Lệnh      ……      [ Exit For ]  Lệnh Next [ phần_tử] Số lần vòng lặp For thực hiện các lệnh tùy thuộc vào số phần tử trong nhóm. Phần tử là biến đối tượng chứa trong một đối tượng khác, còn nhóm có thể là mảng hoặc biến đối tượng bao gồm nhiều đối tượ… Read More
  • VBA: Hàm tách tên trong xâu họ và tênHàm tách tên trong xâu họ và tên.(VD: Nếu biết họ tên là Nguyễn Minh Ngọc, hàm sẽ tách ra được tên là Ngọc)Function GetTen(hoten As String) As StringDim pos As Integer pos = 1 If InStr(pos, Trim(hoten), " ") = 0 Then GetTen = hoten Exit Function End If While InStr(pos + 1, Trim(hoten), " ") > 0pos = InStr(pos + 1, Trim(ten), " ") Wend GetTen = Mid(hoten, pos) End F… Read More
  • Code C#: Mã hóa cổ điển Ceasar (Ceasar Cipher)///Ceasar Cipher/Ceasar Encriptionusing System;class Program{static string Caesar(string value, int shift) { char[] buffer = value.ToCharArray(); for (int i = 0; i < buffer.Length; i++){ // Letter. char letter = buffer[i]; // Add shift to all. letter = (char)(letter + shift); // Subtract 26 on overflow. // Add 26 on underflow. if (letter… Read More
  • Code C-C++: Tìm ma trận chuyển vị trong C++#include<iostream>#include<iomanip>using namespace std;int M[50][50];void NhapMaTran(int A[50][50], int n, int m){ for(int i=0;i<n;i++) for(int j=0;j<m;j++){ cout<<"\n A["<<i<<","<<j<<"]= "; cin>>A[i][j]; }}void InMaTran(int B[50][50], int n,int m){ for(int i=0;i<n;i++){ for(int j=0;j<m;j++) … Read More
  • Code C#: Mã hóa cổ điển Affine (Affine Cipher)///Hàm mã hóa Affine (Affine Encryption)/// e(x) = (ax + b)(mod m). Note: a & m là số nguyên tố cùng nhau.public static string AffineEncrypt(string plainText, int a, int b){string cipherText = "";char[] chars = plainText.ToUpper().ToCharArray();foreach (char c in chars){      int x = Convert.ToInt32(c - 65);       cipherText += C… Read More
  • Code C-C++: Phép toán cộng, nhân hai ma trận#include<conio.h>#include<iostream.h>#define max 100/*Nhap ma tran*/void NhapMaTran(float A[max][max], int m, int n){   for(int i = 0; i<m; i++)   for(int j = 0; j<n; j++) {      cout<<"a["<<i<<"]["<<j<<"] = ";      cin>>A[i][j];   }}/*Xuat ma tran*/void X… Read More




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