You are on page 1of 1

#include <iostream>

#include <algorithm>
using namespace std;
bool dd[1000]; //Mảng đánh dấu đỉnh ma trận
int dem=1, n;
int a[1000][1000]; //Ma trận đồ thị
int b[1000]; //Mảng để lưu thứ tự duyệt đồ thị

//Hàm duyệt đồ thị sử dụng giải thuật DFS


void duyetDoThi(int i)
{
//Vòng for để duyệt qua tất cả các đỉnh
for(int j=1;j<=n;j++)
{
if(a[i][j] != 0 && dd[j]==0)//Neus có đường đi từ đỉnh i tới đỉnh j và đỉnh
j chưa đươc duyệt
{
dd[j ]= 1; //Đánh dấu đỉnh j được duyệt
b[dem++] = j; //Cho đỉnh j vào mảng b để lát nữa ta in ra thứ tự duyệt
duyetDoThi(j); //đệ quy với đỉnh tiếp theo
}
}
}

//Hàm in thứ tự duyệt đồ thị


void inDoThi(){
for(int i = 0;i<n;i++) cout<<b[i]<<" ";
}

int main()
{
cout<<"nhap so dinh: "; cin>>n;
cout<<"Nhap ma tran do thi: \n";
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
cout<<"Ma tran do thi: \n";
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" "; cout<<endl;
}

cout<<"\n\nDuyet do thi: ";


b[0] = 1; //Lấy đỉnh 1 là đỉnh gốc nên ta gắn b 0 là đỉnh 1 để lát nữa ta in ra
thứ tự duyệt đồ thị
dd[1] = 1;//Đánh dấu đỉnh 1 đã được duyệt
duyetDoThi(1); //Gọi duyệt đồ thị
inDoThi(); //in ra thứ tự duyệt đồ thị
}

You might also like