Tìm mọi đường đi từ giữa hai đỉnh
Mô tả bài toán: cho đồ thị vô hướng G=(V,E) hãy xác định mọi đường đi từ đỉnh D tới đỉnh C của đồ thị G.
Ý tưởng thuật toán: sử dụng kỹ thuật tìm kiếm theo chiều sâu.
Mô tả dữ liệu đầu vào và đầu ra của bài toán:
Dữ liệu vào: đồ thị liên thông và cho trong tập tin Bai3.inp
- Dòng đầu ghi số n là số đỉnh của một đồ thị (0<n<100)
- Dòng thứ hai lưu đỉnh D và đỉnh C.
- Dòng i+2 (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 mọi đường đi từ đỉnh D đến C hay thông báo không tồn
tại đường đi từ D đến C.
Mô tả:
Cài đặt chương trình:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define FileIn "Bai1a.inp"
intDem = 0;
int *L;
char *DanhDau;
int **A,n,D,C;
//Đọc dữ liệu từ tập tin
void Doc_File() {
FILE*f = fopen(FileIn,"rb");
fscanf(f,"%d%d%d",&n,&D,&C);
cout<<"Ma Tran Lien Ket Tuong Ung.\n"<<D<<" "<<C<<endl;
*A = new int [n];
for(int i =0;i<n;i++) {
A[i] = new int [n];
for(int j =0;j<n;j++) {
fscanf(f,"%d",&A[i][j]);
cout<<A[i][j]<<" ";
}
cout<<endl;
}
fclose(f);
D--;
C--;
}
//Khởi tạo các biến ban đầu
void KhoiTao() {
DanhDau = new char [n];
L = new int [n];
for (int i = 0; i<n; i++) {
DanhDau[i] = 0;
L[i] = 0;
}
DanhDau[D] = 1;
L[0] = D;
}
void InDuongDi(int SoCanh) {
Dem++;
cout<<endl<<D+1;
for (int i = 1; i<SoCanh; i++)
cout<<" -> "<<L[i]+1;
}
void Try(int SoCanh) {
if(L[SoCanh-1] == C)
InDuongDi(SoCanh);
else {
for(int i = 0; i<n; i++)
if( A[L[SoCanh-1]][i]>0 && DanhDau[i] == 0 ){
L[SoCanh] = i;
DanhDau[i] = 1;
Try(SoCanh+1);
L[SoCanh] = 0;
DanhDau[i]= 0;
}
}
}
void main() {
Doc_File();
KhoiTao();
cout<<"Duong di tu "<<D+1<<" den "<<C+1;
Try(1);
if(Dem==0)
cout<<" khong co duong di";
delete*A,DanhDau,L;
getch();
}
Kết quả chạy chương trình:
Từ khóa: đường đi, đồ thị, đỉnh, c, c++, kỹ thuật lập trình, toán rời rạc, liên thông, tìm đường đi giữa 2 đỉnh của đồ thị
Related Post:
My Location… Read More
Bài 2 - Internal Storage - Lưu vào bộ nhớ trong Bạn có thể lưu trữ một file trực tiếp vào bộ nhớ trong của ứng dụng. Và tất nhiên một khi file đã được lưu trữ vào bộ nhớ trong thì chỉ có ứng dụng của bạn mới có thể truy xuất được. Và chỉ khi nào bạn xóa ứng dụng thì file đó sẽ bị xóa đi.Internal Storage thường được dùng khi bạn muốn lưu thông tin vào một file vào bộ nhớ trong của Devi… Read More
Bài 3 - External Storage - Bộ nhớ ngoài Mọi thiết bị Android hầu như đều hỗ trợ bộ nhớ ngoài cụ thể là SD Card vì vậy chúng ta hoàn toàn có thể lưu trữ file hay truy xuất vào bộ nhớ đó. Bộ nhớ ngoài thường dùng trong các ứng dụng Media như Zing, Nhac của tôi.... Nói chung các ứng dụng liên quan đến việc lưu trữ file. Vì bộ nhớ trong thì giới hạn còn bộ nhớ … Read More
Call - Email - SMS Trong AndroidĐể gọi điện, gửi SMS đến một số nào đó trong ứng dụng của bạn thì bạn phải cần làm các bước như sau (SOURCE CODE):Bước 1: Vào file manifest mở quyền cho phép ứng dụng của bạn có thể Call, SMS <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.SEND_SMS" /> Bước 2: Viết code để Call public … Read More
Đọc RSS Trong Android Đọc RSS bằng Android là một ứng dụng khá phổ biến, nó giúp cho người đọc tin có thể đọc được những nội dung mình yêu thích một cách tập chung.Nhằm đáp ứng nhu cầu đó nhóm Laptrinhandroid.info đã tạo thành một ứng dụng RSS trong android cơ bản sau:Đường dẫn Download source code: TẠI ĐÂY (Các bạn chú ý khi download sẽ gọi ra m… Read More
Viết chương trình gửi SMS trong AndroidĐể viết được ứng dụng gửi SMS cho riêng mình thì các bạn chỉ cần dùng đến đối tượng là SmsManager và phương thức sendTextMessage của nó để gửi. Ngoài ra bạn phải dùng đối tượng BroadcastReceiver để bắt được các trạng thái gửi thành công hay không từ PendingIntent phát ra.Chi tiết về code các bạn download source code: TẠI ĐÂY(Các bạn chú ý khi download sẽ g… Read More
Klik untuk melihat kode: :) =( :s :D :-D ^:D ^o^ 7:( :Q :p T_T @@, :-a :W *fck* x@