Khiêu chuyển chí

DFS ( sưu tác )

Dẫn nhập

DFS vi đồ luận trung đích khái niệm, tường kiếnDFS ( đồ luận )Hiệt diện. TạiSưu tác toán phápTrung, cai từ thường thường chỉ lợi dụng đệ quy hàm sổ phương tiện địa thật hiện bạo lực mai cử đích toán pháp, dữ đồ luận trung đích DFS toán pháp hữu nhất định tương tự chi xử, đãn tịnh bất hoàn toàn tương đồng.

Giải thích

Khảo lự giá cá lệ tử:

Lệ đề

Bả chính chỉnh sổPhân giải viCá bất đồng đích chính chỉnh sổ, như,Bài tại hậu diện đích sổ tất tu đại vu đẳng vu tiền diện đích sổ, thâu xuất sở hữu phương án.

Đối vu giá cá vấn đề, như quả bất tri đạo sưu tác, ứng cai chẩm ma bạn ni?

Đương nhiên thị tam trọng tuần hoàn, tham khảo đại mã như hạ:

Thật hiện
1
2
3
4
for(inti=1;in;++i)
for(intj=i;jn;++j)
for(intk=j;kn;++k)
if(i+j+k==n)printf("%d = %d + %d + %d\n",n,i,j,k);
1
2
3
4
5
foriinrange(1,n+1):
forjinrange(i,n+1):
forkinrange(j,n+1):
ifi+j+k==n:
print("%d=%d+%d+%d"%(n,i,j,k))
1
2
3
4
5
6
7
for(inti=1;in+1;i++){
for(intj=i;jn+1;j++){
for(intk=j;kn+1;k++){
if(i+j+k==n)System.out.printf("%d = %d + %d + %d%n",n,i,j,k);
}
}
}

Na như quả thị phân giải thành tứ cá chỉnh sổ ni? Tái gia nhất trọng tuần hoàn?

Na phân giải thành tiểu vu đẳng vuCá chỉnh sổ ni?

Giá thời hầu tựu nhu yếu dụng đáo đệ quy sưu tác liễu.

Cai loại sưu tác toán pháp đích đặc điểm tại vu, tương yếu sưu tác đích mục tiêu phân thành nhược càn “Tằng”, mỗi tằng cơ vu tiền kỉ tằng đích trạng thái tiến hành quyết sách, trực đáo đạt đáo mục tiêu trạng thái.

Khảo lự thượng thuật vấn đề, tức tương chính chỉnh sổPhân giải thành tiểu vu đẳng vuCá chính chỉnh sổ chi hòa, thả bài tại hậu diện đích sổ tất tu đại vu đẳng vu tiền diện đích sổ, tịnh thâu xuất sở hữu phương án.

Thiết nhất tổ phương án tương chính chỉnh sổPhân giải thànhCá chính chỉnh sổĐích hòa.

Ngã môn tương vấn đề phân tằng, đệTằng quyết định.Tắc vi liễu tiến hành đệTằng quyết sách, ngã môn nhu yếu ký lục tam cá trạng thái biến lượng:,Biểu kỳ hậu diện sở hữu chính chỉnh sổ đích hòa; dĩ cập,Biểu kỳ tiền nhất tằng đích chính chỉnh sổ, dĩ xác bảo chính chỉnh sổ đệ tăng; dĩ cập,Xác bảo ngã môn tối đa thâu xuấtCá chính chỉnh sổ.

Vi liễu ký lục phương án, ngã môn dụng arr sổ tổ, đệ i hạng biểu kỳ.Chú ý đáo arr thật tế thượng thị nhất cá trường độ viĐích sạn.

Đại mã như hạ:

Thật hiện
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
intm,arr[103];// arr dụng vu ký lục phương án

voiddfs(intn,inti,inta){
if(n==0){
for(intj=1;ji-1;++j)printf("%d",arr[j]);
printf("\n");
}
if(im){
for(intj=a;jn;++j){
arr[i]=j;
dfs(n-j,i+1,j);// thỉnh tử tế tư khảo cai hành hàm nghĩa.
}
}
}

// chủ hàm sổ
scanf("%d%d",&n,&m);
dfs(n,1,1);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
arr=[0]*103# arr dụng vu ký lục phương án


defdfs(n,i,a):
ifn==0:
print(arr[1:i])
ifim:
forjinrange(a,n+1):
arr[i]=j
dfs(n-j,i+1,j)# thỉnh tử tế tư khảo cai hành hàm nghĩa.


# chủ hàm sổ
n,m=map(int,input().split())
dfs(n,1,1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
staticintm;

// arr dụng vu ký lục phương án
staticint[]arr=newint[103];

publicstaticvoiddfs(intn,inti,inta){
if(n==0){
for(intj=1;ji-1;j++)System.out.printf("%d",arr[j]);
System.out.println();
}
if(im){
for(intj=a;jn;++j){
arr[i]=j;
dfs(n-j,i+1,j);// thỉnh tử tế tư khảo cai hành hàm nghĩa.
}
}
}

// chủ hàm sổ
finalintN=newScanner(System.in).nextInt();
m=newScanner(System.in).nextInt();
dfs(N,1,1);

Lệ đề

Luogu P1706 toàn bài liệt vấn đề
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include&LTiomanip>
#include&LTiostream>
usingnamespacestd;
intn;
boolvis[50];// phóng vấn tiêu ký sổ tổ
inta[50];// bài liệt sổ tổ, án thuận tự trữ tồn đương tiền sưu tác kết quả

voiddfs(intstep){
if(step==n+1){// biên giới
for(inti=1;in;i++){
coutsetw(5)a[i];// bảo lưu 5 cá tràng khoan
}
coutendl;
return;
}
for(inti=1;in;i++){
if(!vis[i]){// phán đoạn sổ tự i thị phủ tại chính tại tiến hành đích toàn bài liệt trung
vis[i]=true;
a[step]=i;
dfs(step+1);
vis[i]=false;// giá nhất bộ bất sử dụng cai sổ trí 0 hậu duẫn hứa hạ nhất bộ sử dụng
}
}
return;
}

intmain(){
cin>>n;
dfs(1);
return0;
}