You are on page 1of 2

Nguyễn Duy Minh Lâm  NL

Nhà của tôi  Khoá học  2223II_INT2210_4  Đồ thị  Nhóm bạn bè

Cấu trúc dữ liệu và giải thuật (2223II_INT2210_4) Nhóm bạn bè

Bắt đầu vào lúc Monday, 29 May 2023, 10:27 AM


Trạng thái Đã xong
Kết thúc lúc Monday, 29 May 2023, 10:27 AM
Thời gian thực hiện 6 giây
Điểm 10,00 trên 10,00 (100%)
Câu Hỏi 1 Đúng

Trong một trường học có n học sinh, một học sinh có thể là bạn với một số học sinh khác. Mối quan hệ bạn bè giữa các học sinh có tính hai chiều (A là bạn
của B thì B cũng là bạn của A ) và tính bắc cầu (nếu A là bạn của B, B là bạn của C thì A là bạn của C ). Một nhóm học sinh được gọi là nhóm bạn bè
nếu tất cả mọi người trong nhóm là bạn của nhau.

Cho ma trân M kích thước n × n biểu diễn mối quan hệ của các học sinh trong trường, trong đó Mi,j = Mj,i = 1 nếu i và j là bạn của nhau. Bạn hãy
viết chương trình tính số lượng nhóm bạn bè trong trường học.

Đầu vào

Dữ liệu vào từ bàn phím gồm n + 1 dòng. Dòng đầu tiên chứa n số nguyên là số lượng học sinh trong trường (n ≤ 1000) n. dòng tiếp theo mỗi dòng
chứa n số nguyên cách nhau bởi một dấu cách thể hiện ma trận biểu diễn mối quan hệ giữa các học sinh trong trường.

Đầu ra

In ra màn hình một dòng duy nhất chứa số lượng nhóm bạn bè trong trường.

For example:

Input Result

4 2
1 1 0 0
1 1 1 0
0 1 1 0
0 0 0 1

Answer:

1 #include<bits/stdc++.h>
2 using namespace std;
3 void dfs(int** a, vector<bool> &marked, int i, int n)
4 ▼ {
5 marked[i] = true;
6 for(int j = 0; j < n; j++)
7 ▼ {
8 if(!marked[j] && a[i][j] == 1) // chưa duyệt i, i và j là bạn
9 ▼ {
10 dfs(a,marked,j,n); // duyệt j, tiếp tục tìm bạn j
11 }
12 }
13 }
14 int main()
15 ▼ {
16 int n;
17 vector<bool> marked;
18 cin >> n;
19 marked.resize(n,false);
20 int** a = new int *[n];
21 for( int i = 0; i < n; i++)
22 ▼ {
23 a[i] = new int [n];
24 for(int j = 0; j < n; j++)
25 ▼ {
26 cin >> a[i][j];
27 }
28 }

Passed all tests!

Đúng

Marks for this submission: 10,00/10,00.

◄ Lịch học Chuyển tới... Số lượng hòn đảo (chép) ►

You might also like