Mô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy xác định mọi đường đi qua tất cả các cạnh mỗi cạnh chỉ qua duy nhất 1 lần.
Ý tưởng thuật toán:sử dụng kỹ thuật tìm kiếm theo chiều sâu bằng cách xóa cạnh đã đi qua trong quá trình tìm kiếm đường đi.
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 Bai5.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: in ra màn hình đường đi qua tất cả các cạnh (nếu có)
Ví dụ:
Cài đặt chương trình:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define Filename "Bai5.inp"
int Dem = 0, SoCanh=0;
int *L;
int **A,n;
int XuatPhat=0;
void Doc_File() {
int BacDinh;
FILE*f = fopen(Filename,"rb");
fscanf(f,"%d",&n);
cout<<"Ma Tran Lien Ket Tuong Ung.\n"<<n<<endl;
*A = new int [n];
for(int i =0;i<n;i++) {
A[i] = new int [n];
BacDinh = 0;
for(int j =0;j<n;j++) {
fscanf(f,"%d",&A[i][j]);
cout<<A[i][j]<<" ";
if(A[i][j] == 1)
BacDinh++;
}
if(BacDinh%2==1)
XuatPhat = i;
SoCanh+=BacDinh;
cout<<endl;
}
fclose(f);
SoCanh = SoCanh/2;
L = new int [SoCanh+1];
L[0] = XuatPhat;
}
void InDuongDi() {
Dem++;
cout<<endl<<XuatPhat+1;
for (int i = 1; i<=SoCanh; i++)
cout<<" -> "<<L[i]+1;
}
void Try(int Canh) {
if(Canh > SoCanh)
InDuongDi();
else {
for(int i = 0; i<n; i++)
if( A[L[Canh-1]][i]>0){
L[Canh] = i;
A[L[Canh-1]][i]=A[i][L[Canh-1]]=0;
Try(Canh+1);
A[L[Canh-1]][i]=A[i][L[Canh-1]]=1;
L[Canh] = 0;
}
}
}
void main() {
Doc_File();
cout<<"\nDUONG DI";
Try(1);
if(Dem==0)
cout<<" KHONG CO";
delete*A,L;
getch();
}
Kết quả chạy chương trình:
Tags: Kỹ thuật lập trình, toán rời rạc, c, c++, euler, đồ thị, tìm đường đi
Related Post:
Bài 4 - Multithreading trong Java Trong Java chúng ta có thể tạo ra nhiều Thread để chạy ở các luồng khác nhau vì vậy gọi là Multi threading và tại một thời điểm có thể có nhiều Thread chạy đồng thời.Để định nghĩa một thread trong Java ta có thể sử dụng cách sau:public class Main { public static void main(String[] args) { //Tạo một thread Thread th = new Thread(childThread); //Run thread đồng… Read More
Giới thiệt một số công cụ trong Android1. SDK - Software development toolkit cung cấp:API librariesbuild TestDebugAndroid Platform-tools 2. Android Emulator - Thiết bị giả lập Tạo máy ảo thế nàoChạy ứng dụng với một máy ảo bất kỳ3. ADT - Android Developer Tools Eclipse + ADT pluginAndroid SDK ToolsAndroid Platform-tools… Read More
Cấu trúc một ứng dụng Android gồm có những gìCấu trúc một ứng dụng Android gồm có:Thư mục SRCThư mục genThư mục assetsThư mục libsThư mục resFile AndroidManifest.xmlMội số khái niệm quan trọngActivity, ViewIntent drawablevaluesFile cấu hình các thông số AndroidManifest… Read More
Bài 2 - Bắt đầu với Java1. Data type (Các kiễu dữ liệu):Có 2 loại:+ Primitive Data Types (Dữ liệu nguyên thuỷ):+ Oject Data Types (Dữ liệu kiểu object) String, Double, Integer, Float...2. Operations (Các toán tử): (Tập chung vào 2 loại sau)+ Các toán tử về số học:phép cộng (+), phép trừ (-), phép nhân (*), phép chia (/), phép chia lấy dư (%), phép tăng lên 1 (++), Phép giả… Read More
Bài 3 - Lập trình hướng đối tượng với JavaĐể lập trình với JAVA thì chúng ta phải nắm chắc 4 kỹ thuật sau:Download source code (Chú ý sau khi click download nhìn lên góc trên cùng bên phải chọn skip add - Bỏ quảng cáo).1. Encapsulation (Đóng gói) Mục đích: Viết code theo kỹ thuật này dễ bảo trì, chỉ cho phép class ngoài truy xuất tới một số phương thức cho phép, tính mở rộng cao.2. Inheritance (Kế t… Read More
Cài đặt và tạo một ứng dụng Android đầu tiênĐể bắt đầu làm việc với Android thì chúng ta phải cài đặt những công cụ sau:1. JDK (Java Development Kit) - Bộ công cụ phát triển JavaLink Download 2. ADT (Android Developer Tools)Gói ADT mà Android cung cấp đầy đủ các công cụ sau:Eclipse + ADT pluginAndroid SDK ToolsAndroid Platform-toolsThe latest Android platformThe latest Android system image for the emulator… Read More
Klik untuk melihat kode: