深度优先搜索——简单全排列(入门)

问题描述:

问题一:全排列

输入一个数n,输出1-n的全排列

样例:

输入:3

输出:123,132,213,231,312,321

样例代码

 1 #include<stdio.h>
 2 int a[10], book[10], n;
 3 
 4 void dfs(int step) {
 5     int i;
 6     if(step == n+1) {
 7         for(i = 1; i <= n; i++)
 8         printf("%d", a[i]);
 9         printf("\n");
10         return;
11     }
12     
13     for(i = 1; i <= n; i++) {
14         if(book[i] == 0) {
15             a[step] = i;
16             book[i] = 1;
17             dfs(step+1);
18             book[i] = 0;
19         }        
20     }
21     return;
22 }
23 
24 int main(){
25     scanf("%d", &n);
26     dfs(1);
27     return 0;
28 }

问题二:暴力枚举

abc+def=ghi

a,b,c,d,e,f,g,h,i分别为1-9的数字,每个数字只出现一次

样例代码

 1 #include<stdio.h>
 2 int a[10], book[10], total;
 3 
 4 void dfs(int step) {
 5     int i;
 6     if(step == 10)
 7     {
 8         if(a[1]*100 + a[2]*10 + a[3] + a[4]*100 + a[5]*10 + a[6] == a[7]*100 + a[8]*10 + a[9]) 
 9         {
10             total++;
11             printf("%d%d%d + %d%d%d = %d%d%d\n", a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]);
12         }
13         return ;
14     }
15     for(i = 1; i <= 9; i++) {
16         if(book[i] == 0) {
17             a[step] = i;
18             book[i] = 1;
19             dfs(step+1);
20             book[i] = 0;
21         }
22     }
23     return ;
24 }
25 
26 int main(){
27     dfs(1);
28     printf("total = %d\n", total/2);
29     return 0;
30 }

 

转载于:https://www.cnblogs.com/really41/p/10554015.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值