DFS小题

原创



题目为:()()()+()()()=()()()

将1~9这9个数字填入括号,每个数字只能用一次。

枚举:

 1 public class Test {
 2     public static void main(String[] args){
 3         int a[]=new int[9];
 4         int flag[]=new int[10];
 5         long total=0L;
 6         for(int i=1;i<=9;i++) {
 7             flag[i]=0;
 8         }
 9         for(a[0]=1;a[0]<=9;a[0]++) {
10             for(a[1]=1;a[1]<=9;a[1]++) {
11                 for(a[2]=1;a[2]<=9;a[2]++) {
12                     for(a[3]=1;a[3]<=9;a[3]++) {
13                         for(a[4]=1;a[4]<=9;a[4]++) {
14                             for(a[5]=1;a[5]<=9;a[5]++) {
15                                 for(a[6]=1;a[6]<=9;a[6]++) {
16                                     for(a[7]=1;a[7]<=9;a[7]++) {
17                                         for(a[8]=1;a[8]<=9;a[8]++) {
18                                             int tt=0;
19                                             for(int i=0;i<=8;i++) {
20                                                 flag[a[i]]=1;
21                                             }
22                                             for(int i=1;i<=9;i++) {
23                                                 tt+=flag[i];
24                                             }
25                                             if(tt==9) {
26                                                 if(a[0]*100+a[1]*10+a[2]+a[3]*100+a[4]*10+a[5]==a[6]*100+a[7]*10+a[8]) {
27                                                     total++;
28                                                     tt=0;
29                                                 }
30                                             }
31                                             for(int i=1;i<=9;i++) {    //数组恢复
32                                                 flag[i]=0;
33                                             }
34
35                                         }
36                                     }
37                                 }
38                             }
39                         }
40                     }
41                 }
42             }
43         }
44         System.out.println(total);
45     }
46 }

全排列:

关于全排列,请看我上一篇博客:https://www.cnblogs.com/chiweiming/p/9279858.html

 1 public class Test{
 2
 3     static int flag[]=new int[10];    //flag[i]=0代表第i个数未用
 4     static int win[]=new int[9];
 5     static long total=0L;
 6
 7     public static void dfs(int step) {    //第step个格子
 8         if(step==9) {
 9             if(win[0]*100+win[1]*10+win[2]+win[3]*100+win[4]*10+win[5]==win[6]*100+win[7]*10+win[8]) {
10                 total++;
11             }
12             return;
13         }
14         for(int i=1;i<=9;i++) {    //尝试按顺序将1~9其中一个放入格子
15             if(flag[i]==0) {
16                 win[step]=i;
17                 flag[i]=1;
18                 dfs(step+1);
19                 flag[i]=0;
20             }
21         }
22     }
23
24     public static void main(String args[]) {
25         for(int i=1;i<=9;i++) {
26             flag[i]=0;
27         }
28         dfs(0);
29         System.out.println(total);
30     }
31 }

答案:336

23:26:20

2018-07-09

原文地址:https://www.cnblogs.com/chiweiming/p/9283331.html

时间: 2024-11-08 19:59:57

DFS小题的相关文章

迷宫救人——DFS小题

原创 题目大意:人质被困在迷宫之中,要求你寻找一条最短路径快速找到人质. 如图,人质在黄色点2处,营救者在起点红色处,1表示无法通过的障碍点,寻找一条最短路径快速找到人质. 毫无疑问用DFS,遍历4个方向,比较每条可以找到人质的路径即可得到答案. 1 import java.util.Scanner; 2 3 public class Maze_rescue { 4 5 static int n; //行 6 static int m; //列 7 static int min=99999; 8

关于js中全局变量和局部变量的寄到小题

往往最基本的也是最根本的. 这里有三道关于全局变量和局部变量的小题,供诸位一阅. 知识点: (1)在最外层声明的是全局变量 (2)在函数内声明的是局部变量 (3)在函数体内部,但是没有用var声明的变量也是全局变量 第一题: var a = 10;function fun(){var a = "global";}console.log(a); 第二题: var a ;function fun(){a = "global";} fun();console.log(a)

关于SQL的几道小题详解

关于SQL的几道小题详解 当我们拿到题目的时候,并不是急于作答,那样会得不偿失的,而是分析思路,采用什么方法,达到什么目的,还要思考有没有简单的方法或者通用的方法等等,这样才会达到以一当十的效果,这样的惯性思维其实早在我们度高中的时候就被领教了,所谓“万变不离其宗”吧.以下各题来自日常所见,或QQ群,或面试题,或博客园. 题目一:如下表所示,现需要按照收款员统计收款和退款合计金额. 实现结果需如下显示: 分析:想要的结果(记为表B)和源数据(记为表A)相比,有共同的列(收款员),不同的是表A的金

Oil Deposits(poj 1526 DFS入门题)

http://poj.org/problem?id=1562 Oil Deposits Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12595   Accepted: 6868 Description The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp wor

leetcode中关于树的dfs算法题

Validate Binary Search Tree Recover Binary Search Tree Symmetric Tree Same Tree Maximum Depth of Binary Tree Construct Binary Tree from Preorder and Inorder Traversal Construct Binary Tree from Inorder and Postorder Traversal Convert Sorted Array to

关于理解python类的小题

今天看了python部落翻译的一篇<一道python类的小题>文章,感觉挺有启发性,记录下来: 1 print('A') 2 class Person(object): 3 print('B') 4 def __int__(self,name): 5 print('C') 6 self.name = name 7 print('D') 8 print('E') 9 10 11 p1= Person('name1') 12 p2 = Person('name2') 输出结果: A B D E C

几个小题

1.从一个数值连续的数组中,抽调n个元素,查找抽调的是哪几个 #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int a[100] = {0}; //抽掉3, 4, 57 int b[100] = {0}; //原始数组, [0, 99] for (int i = 0; i < sizeof(a) / sizeof(a

递归小题中的空间换时间思想

题目: 如数: 1  1  2  3   5   8   13   21  34  55 ...... 序号: 0  1  2  3   4   5   6     7    8    9 ...... 由用户输入序号,输出对应的数值. 效果: 实现代码: #include <stdio.h> int bian(int num); //static int shu[100]={1,1}; int main() { int num; while ( printf("请输入编号数:&qu

逛园子,看到个练习题,小试了一把(淘宝ued的两道小题)

闲来无事,逛园子,充充电.发现了一个挺有意思的博文,自己玩了一把. 第一题:使用 HTML+CSS 实现如图布局,border-widht 1px,一个格子大小是 60*60,hover时候边框变为橘红色(兼容IE6+,考虑语义化的结构) 效果图: 简单分析一下: 使用伪类 :hover的时候相对定位 改变z-index, 代码如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta c