Professional Documents
Culture Documents
Buoi 4
Buoi 4
Viết chương trình duyệt tất cả các thành phần liên thông của đồ thị
biểu diễn dưới dạng ma trận kề sử dụng DFS.
1.1 Code
#include <bits/stdc++.h>
int n, u;
int a[1000][1000];
bool chuaXet[1000];
void DFS(int u) {
std::stack<int> Stack;
Stack.push(u);
chuaXet[u] = false;
cout<<u<<" ";
while (!Stack.empty()) {
chuaXet[i] = false;
cout<<i<<" ";
Stack.push(s);
Stack.push(i);
break;
}
}
void reInit() {
chuaXet[i] = true;
a[i][j] = 0;
int main() {
cin >> n;
reInit();
int soLt = 0;
if(chuaXet[i] == true) {
soLt = soLt + 1;
cout<<endl<<"Thanh phan lien thong thu "<<soLt<<": ";
DFS(i);
return 0;
1.2 Test 1
0010101000000
0001010000000
1000101000100
0100010101000
1010001010101
0101000101000
1010100010000
0001010001010
0000101000101
0001010100010
0010100010001
0000000101000
0000100010100
1.2 Test 2
000
000
000
1.3 Test 3
0100
1000
0000
0000
2. Viết chương trình đọc vào 1 đồ thị có hướng biểu diễn dưới dạng ma
trận kề, kiểm tra tính liên thông mạnh của đồ thị sử dụng BFS.
2.1 Code
#include <bits/stdc++.h>
int n, u;
int a[1000][1000];
bool chuaXet[1000];
void BFS(int u) {
std::queue<int> Queue;
Queue.push(u);
chuaXet[u] = false;
while(!Queue.empty()) {
int s = Queue.front(); Queue.pop();
cout<<s<<" ";
Queue.push(i);
chuaXet[i] = false;
void reInit() {
chuaXet[i] = true;
int main() {
cin >> n;
reInit();
}
for(int i = 1; i <= n; i++) {
reInit();
cout<<endl;
BFS(i);
if(chuaXet[j] == true) {
return 0;
return 0;
2.2 Test 1
0010101000000
0001010000000
1000101000100
0100010101000
1010001010101
0101000101000
1010100010000
0001010001010
0000101000101
0001010100010
0010100010001
0000000101000
0000100010000
2.3 Test 2
0000010000000
0010000100000
0000000010001
1000010000000
0000001000000
0000000001010
0000000000101
0001000000010
0000101000000
0110000000000
0100000100000
0001000001000
0000000010100
2.4 Test 3
0100
0000
0001
0000
3. Viết chương trình đọc vào 1 đồ thị biểu diễn dưới dạng danh sách kề,
tìm đường đi từ s đến t (s, t được nhập vào từ bàn phím) sử dụng DFS
hoặc BFS. In ra kết quả.
3.1 Code
#include <bits/stdc++.h>
void BFS(int u) {
std::queue<int> Queue;
Queue.push(u);
chuaXet[u] = false;
while(!Queue.empty()) {
int s = Queue.front(); Queue.pop();
// cout<<s<<" ";
for(int i = 1; i <= n; i++) {
if(a[s][i] == 1 && chuaXet[i] == true) {
Queue.push(i);
chuaXet[i] = false;
truoc[i] = s;
if(i == eNd) {
return;
}
}
}
}
}
void reInit() {
for (int i = 1; i <= n; i++)
chuaXet[i] = true;
}
int main() {
cout << "Nhap so dinh cua do thi: ";
cin >> n >> sTart >> eNd;
cout << "Nhap ma tran ke cua do thi:\n";
reInit();
BFS(sTart);
do {
cout<<eNd<<" ";
eNd = truoc[eNd];
}while(eNd != sTart);
cout<< sTart<< " ";
return 0;
}
3.2 Test 1
0000010000000
0010000100000
0000000010001
1000010000000
0000001000000
0000000001010
0000000000101
0001000000010
0000101000000
0110000000000
0100000100000
0001000001000
0000000010100
3.3 Test 2
3.4 Test 3