Skip to content

Commit 885a415

Browse files
author
Domiee13
committed
Final commit ^^
1 parent 4675af5 commit 885a415

30 files changed

+1221
-30
lines changed

.ex04.py.swp

12 KB
Binary file not shown.

.vscode/settings.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"files.associations": {
33
"ostream": "cpp",
4-
"iostream": "cpp"
4+
"iostream": "cpp",
5+
"random": "cpp"
56
}
67
}

7/ex100.cpp

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//Chuyen danh sach canh sang danh sach ke
2+
3+
#include <bits/stdc++.h>
4+
5+
using namespace std;
6+
7+
int main(){
8+
int t;
9+
cin>>t;
10+
while(t--){
11+
int v,e;//v :so dinh, e: so canh
12+
cin>>v>>e;
13+
// vector<int> ke(v);//Khai bao ten+kich thuoc
14+
vector<int> ke[v+5];
15+
for(int i = 0;i<e;i++){
16+
int a,b;
17+
cin>>a>>b;
18+
ke[a].push_back(b);
19+
ke[b].push_back(a);
20+
}
21+
for(int i = 1;i<=v;i++){
22+
sort(ke[i].begin(),ke[i].end());
23+
}
24+
for(int i = 1;i<=v;i++){
25+
cout<<i<<": ";
26+
for(int j = 0;j<ke[i].size();j++){
27+
cout<<ke[i][j]<<" ";
28+
}
29+
cout<<endl;
30+
}
31+
}
32+
return 0;
33+
}

7/ex104.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Ma trận kề A của một đồ thị vô hướng là một ma trận chỉ có các số 0 hoặc 1 trong đó A[i][j] = 1 có ý nghĩa là đỉnh i kề với đỉnh j (chỉ số tính từ 1).
2+
3+
// Danh sách kề thì liệt kê các đỉnh kề với đỉnh đó theo thứ tự tăng dần.
4+
5+
// Hãy chuyển biểu diễn đồ thị từ dạng ma trận kề sang dạng danh sách kề.
6+
7+
// Input: Dòng đầu tiên chứa số nguyên n – số đỉnh của đồ thị (1 < n ≤ 1000). n dòng tiếp theo, mỗi dòng có n số nguyên có giá trị 0 và 1 mô tả ma trận kề của đồ thị.
8+
9+
// Output: Gồm n dòng, dòng thứ i chứa các số nguyên là đỉnh có nối với đỉnh i và được sắp xếp tăng dần. Dữ liệu đảm bảo mỗi đỉnh có kết nối với ít nhất 1 đỉnh khác.
10+
11+
#include <bits/stdc++.h>
12+
13+
using namespace std;
14+
15+
int main(){
16+
int n;
17+
cin>>n;
18+
int a[n+5][n+5];
19+
for(int i = 1;i<=n;i++){
20+
for(int j = 1;j<=n;j++){
21+
cin>>a[i][j];
22+
if(a[i][j]) cout<<j<<" ";
23+
}
24+
cout<<endl;
25+
}
26+
return 0;
27+
}

7/ex106.cpp

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Cho đồ thị có hướng G= được biểu diễn dưới dạng danh sách cạnh. Hãy viết chương trình thực hiện chuyển đổi biểu diễn đồ thị dưới dạng danh sách kề.
2+
3+
// Input:
4+
5+
// Dòng đầu tiên đưa vào T là số lượng bộ test.
6+
// Những dòng tiếp theo đưa vào các bộ test. Mỗi bộ test gồm |E| +1 dòng: dòng đầu tiên đưa vào hai số |V|, |E| tương ứng với số đỉnh và số cạnh của đồ thị; |E| dòng tiếp theo đưa vào các bộ đôi uÎV, vÎV tương ứng với một cạnh của đồ thị.
7+
// T, |V|, |E| thỏa mãn ràng buộc: 1≤T≤200; 1≤|V|≤103; 1≤|E|≤|V|(|V|-1)/2;
8+
// Output:
9+
10+
// Đưa ra danh sách kề của các đỉnh tương ứng theo khuôn dạng của ví dụ dưới đây. Các đỉnh trong danh sách in ra theo thứ tự tăng dần.
11+
// Ví dụ:
12+
13+
#include <bits/stdc++.h>
14+
15+
using namespace std;
16+
17+
int main(){
18+
int t;
19+
cin>>t;
20+
while(t--){
21+
int v,e;
22+
cin>>v>>e;
23+
vector<int> ke[v+5];
24+
for(int i = 0;i<e;i++){
25+
int a,b;
26+
cin>>a>>b;
27+
ke[a].push_back(b);
28+
}
29+
for(int i = 1;i<=v;i++){
30+
sort(ke[i].begin(),ke[i].end());
31+
}
32+
for(int i = 1;i<=v;i++){
33+
cout<<i<<": ";
34+
for(int j = 0;j<ke[i].size();j++){
35+
cout<<ke[i][j]<<" ";
36+
}
37+
cout<<endl;
38+
}
39+
}
40+
return 0;
41+
}

7/ex107.cpp

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Cho đồ thị vô hướng G= được biểu diễn dưới dạng danh sách cạnh. Hãy viết thuật toán duyệt theo chiều sâu bắt đầu tại đỉnh uÎV (DFS(u)=?)
2+
3+
// Input:
4+
5+
// Dòng đầu tiên đưa vào T là số lượng bộ test.
6+
// Những dòng tiếp theo đưa vào các bộ test. Mỗi bộ test gồm |E| +1 dòng: dòng đầu tiên đưa vào ba số |V|, |E| tương ứng với số đỉnh và số cạnh của đồ thị, và u là đỉnh xuất phát; |E| dòng tiếp theo đưa vào các bộ đôi uÎV, vÎV tương ứng với một cạnh của đồ thị.
7+
// T, |V|, |E| thỏa mãn ràng buộc: 1≤T≤200; 1≤|V|≤103; 1≤|E|≤|V|(|V|-1)/2;
8+
// Output:
9+
10+
// Đưa ra danh sách các đỉnh được duyệt theo thuật toán DFS(u) của mỗi test theo khuôn dạng của ví dụ dưới đây.
11+
12+
#include <bits/stdc++.h>
13+
using namespace std;
14+
15+
int v,e,s;
16+
vector<int> ke[1005];
17+
bool chuaxet[1005];
18+
void DFS(int u){
19+
cout<<u<<" ";
20+
chuaxet[u]=false;
21+
for(int i = 0;i<ke[u].size();i++){
22+
if(chuaxet[ke[u][i]]){
23+
DFS(ke[u][i]);
24+
}
25+
}
26+
}
27+
28+
int main(){
29+
int t;
30+
cin>>t;
31+
while(t--){
32+
cin>>v>>e>>s;
33+
for(int i = 0;i<1006;i++){
34+
ke[i].clear();
35+
}
36+
memset(chuaxet,true,sizeof(chuaxet));
37+
for(int i = 0;i<e;i++){
38+
int a,b;
39+
cin>>a>>b;
40+
ke[a].push_back(b);
41+
ke[b].push_back(a);
42+
}
43+
DFS(s);
44+
cout<<endl;
45+
}
46+
return 0;
47+
}

7/ex109.cpp

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// Cho đồ thị vô hướng G= được biểu diễn dưới dạng danh sách cạnh. Hãy viết thuật toán duyệt theo chiều rộng bắt đầu tại đỉnh uÎV (BFS(u)=?)
2+
3+
// Input:
4+
5+
// Dòng đầu tiên đưa vào T là số lượng bộ test.
6+
// Những dòng tiếp theo đưa vào các bộ test. Mỗi bộ test gồm 2 dòng: dòng đầu tiên đưa vào ba số |V|, |E|, uÎV tương ứng với số đỉnh, số cạnh và đỉnh bắt đầu duyệt; Dòng tiếp theo đưa vào các bộ đôi uÎV, vÎV tương ứng với một cạnh của đồ thị.
7+
// T, |V|, |E| thỏa mãn ràng buộc: 1≤T≤200; 1≤|V|≤103; 1≤|E|≤|V|(|V|-1)/2;
8+
// Output:
9+
10+
// Đưa ra danh sách các đỉnh được duyệt theo thuật toán BFS(u) của mỗi test theo khuôn dạng của ví dụ dưới đây.
11+
// Ví dụ:
12+
13+
// Input:
14+
15+
// Output:
16+
17+
// 1
18+
19+
// 6 9 1
20+
21+
// 1 2 1 3 2 3 2 5 3 4 3 5 4 5 4 6 5 6
22+
23+
// 1 2 3 5 4 6
24+
25+
#include <bits/stdc++.h>
26+
27+
using namespace std;
28+
29+
int v,e,u;
30+
vector<int> ke[1005];
31+
bool chuaxet[1005];
32+
33+
void BFS(int u){
34+
queue<int> stk;
35+
stk.push(u);
36+
chuaxet[u]=false;
37+
while(!stk.empty()){
38+
int s = stk.front();
39+
stk.pop();
40+
cout<<s<<" ";
41+
for(int i = 0;i<ke[s].size();i++){
42+
if(chuaxet[ke[s][i]]){
43+
stk.push(ke[s][i]);
44+
chuaxet[ke[s][i]]=false;
45+
}
46+
}
47+
}
48+
}
49+
50+
int main(){
51+
int t;
52+
cin>>t;
53+
while(t--){
54+
for(int i =0;i<1006;i++){
55+
ke[i].clear();
56+
}
57+
memset(chuaxet,true,sizeof(chuaxet));
58+
cin>>v>>e>>u;
59+
for(int i = 0;i<e;i++){
60+
int a,b;
61+
cin>>a>>b;
62+
ke[a].push_back(b);
63+
ke[b].push_back(a);
64+
}
65+
BFS(u);
66+
cout<<endl;
67+
}
68+
return 0;
69+
}

ex100.cpp

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Cho đồ thị vô hướng G= được biểu diễn dưới dạng danh sách cạnh. Hãy viết chương trình thực hiện chuyển đổi biểu diễn đồ thị dưới dạng danh sách kề.
2+
//
3+
// Input:
4+
//
5+
// Dòng đầu tiên đưa vào T là số lượng bộ test.
6+
// Những dòng tiếp theo đưa vào các bộ test. Mỗi bộ test gồm |E| +1 dòng: dòng đầu tiên đưa vào hai số |V|, |E| tương ứng với số đỉnh và số cạnh của đồ thị; |E| dòng tiếp theo đưa vào các bộ đôi uÎV, vÎV tương ứng với một cạnh của đồ thị.
7+
// T, |V|, |E| thỏa mãn ràng buộc: 1≤T≤200; 1≤|V|≤103; 1≤|E|≤|V|(|V|-1)/2;
8+
// Output:
9+
//
10+
// Đưa ra danh sách kề của các đỉnh tương ứng theo khuôn dạng của ví dụ dưới đây. Các đỉnh trong danh sách in ra theo thứ tự tăng dần.
11+
#include <bits/stdc++.h>
12+
13+
using namespace std;
14+
15+
int main(){
16+
int t;
17+
cin>>t;
18+
while(t--){
19+
int v,e;
20+
cin>>v>>e;
21+
vector<int> ke[v+5];
22+
for(int i = 0;i<e;i++){
23+
int a,b;
24+
cin>>a>>b;
25+
ke[a].push_back(b);
26+
ke[b].push_back(a);
27+
}
28+
for(int i = 1;i<=v;i++){
29+
sort(ke[i].begin(),ke[i].end());
30+
}
31+
for (int i = 1;i<=v;i++){
32+
cout<<i<<": ";
33+
for(int j = 0;j<ke[i].size();j++){
34+
cout<<ke[i][j]<<" ";
35+
}
36+
cout<<endl;
37+
}
38+
}
39+
return 0;
40+
}

ex101.cpp

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Cho dãy số A[] gồm có N phần tử đã được sắp xếp tăng dần và số K.
2+
3+
// Nhiệm vụ của bạn là kiểm tra xem số K có xuất hiện trong dãy số hay không. Nếu có hãy in ra vị trí trong dãy A[], nếu không in ra “NO”.
4+
5+
// Input:
6+
7+
// Dòng đầu tiên là số lượng bộ test T (T ≤ 10).
8+
9+
// Mỗi test bắt đầu bằng số nguyên N và K (N ≤ 100 000, 0 ≤ K ≤ 106).
10+
11+
// Dòng tiếp theo gồm N số nguyên A[i] (0 ≤ A[i] ≤ 106), các phần tử là riêng biệt.
12+
13+
// Output:
14+
15+
// Với mỗi test in ra trên một dòng đáp án tìm được.
16+
17+
#include <bits/stdc++.h>
18+
19+
using namespace std;
20+
21+
int main(){
22+
int t;
23+
cin>>t;
24+
while(t--){
25+
long n,k;
26+
cin>>n>>k;
27+
long a[n+5];
28+
for(long i = 0;i<n;i++){
29+
cin>>a[i];
30+
}
31+
long *p = find(a,a+n,k);
32+
if(p!=a+n){
33+
cout<<*p<<endl;
34+
}
35+
else cout<<"NO"<<endl;
36+
}
37+
return 0;
38+
}

ex101.py

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
t = int(input())
2+
3+
for i in range(t):
4+
n,k = input().split()
5+
n,k = int(n),int(k)
6+
a = [int(i) for i in input().split()]
7+
if k in a:
8+
print(a.index(k)+1)
9+
else:
10+
print("NO")

ex102.cpp

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Cho đơn đồ thị G vô hướng liên thông được mô tả bởi danh sách kề. Hãy in ra danh sách cạnh tương ứng của G.
2+
3+
// Input
4+
5+
// Dòng đầu tiên ghi số N là số đỉnh (1
6+
// N dòng tiếp theo mỗi dòng ghi 1 danh sách kề lần lượt theo thứ tự từ đỉnh 1 đến đỉnh N
7+
// Output: Ghi ra lần lượt từng cạnh của đồ thị theo thứ tự tăng dần.
8+
9+
#include <bits/stdc++.h>
10+
11+
using namespace std;
12+
13+
int main(){
14+
int n;
15+
cin>>n;
16+
cin.ignore();
17+
vector<int> ke[100];
18+
string s;
19+
for(int i = 1;i<=n;i++){
20+
getline(cin,s);
21+
s+=" ";
22+
int so = 0;
23+
int j=0;
24+
while(j<s.size()){
25+
if(s[j]>='0' && s[j]<='9'){
26+
so = so*10 + int(s[j]-'0');
27+
}
28+
else if(so > 0){
29+
ke[i].push_back(so);
30+
so = 0;
31+
}
32+
j++;
33+
}
34+
}
35+
for(int i = 1;i<=n;i++){
36+
sort(ke[i].begin(),ke[i].end());
37+
}
38+
//Mang danh dau da duoc in ra chua
39+
int d[100][100];
40+
memset(d,0,sizeof(d));
41+
for(int i = 1;i<=n;i++){
42+
for(int j = 0;j<ke[i].size();j++){
43+
if(!d[i][ke[i][j]] && !d[ke[i][j]][i]){
44+
cout<<i<<" "<<ke[i][j]<<endl;
45+
d[i][ke[i][j]] = d[ke[i][j]][i] = 1;
46+
}
47+
}
48+
}
49+
return 0;
50+
}

0 commit comments

Comments
 (0)