(深度优先搜索第一课) 统计三角形 - DFS
2015-12-20 23:28
260 查看
今天开始选修了计蒜客上的“程序设计竞赛入门”课程,为自己弱渣的算法能力寻找一个提高空间
这是深度优先搜索的第一课,题目是这样描述:
给N根不同长度的木棍,求这些木棍一共能拼出多少个不同的不等边三角形。注意在拼三角形的时候一定要用上所有的N根木棍。不同的定义是至少有一条边的长度不相同;不等边的定义是三条边都不相等。
输入格式:
第一行为数据组数T,(1<=T<=15)。
接下来每行数据占两行,第一行为木棍的数量N(1<=N<=15)
第二行有N个正整数li(1<=li<100),表示N个木棍的长度。保证每个长度都不相同。
输出格式:每组数据输出一个非负整数,表示能组成的不同的三角形个数。
样例输入:
1
3
2 3 4
样例输出:
1
代码如下:
这是深度优先搜索的第一课,题目是这样描述:
给N根不同长度的木棍,求这些木棍一共能拼出多少个不同的不等边三角形。注意在拼三角形的时候一定要用上所有的N根木棍。不同的定义是至少有一条边的长度不相同;不等边的定义是三条边都不相等。
输入格式:
第一行为数据组数T,(1<=T<=15)。
接下来每行数据占两行,第一行为木棍的数量N(1<=N<=15)
第二行有N个正整数li(1<=li<100),表示N个木棍的长度。保证每个长度都不相同。
输出格式:每组数据输出一个非负整数,表示能组成的不同的三角形个数。
样例输入:
1
3
2 3 4
样例输出:
1
代码如下:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int n, l[15];//n表示木棍数量,l数组中的元素表示每根木棍的长度 bool h[10000];//h存储一个三角形的方案是否已经存在过。因为三条边总长度就是所有木棍的长度,也就是固定的, //所以只要确定两条边的长度就能知道第三条边的长度。给定数据范围小于100,故此只要拿a*100+b标记 bool is_triangle(int a, int b, int c) {//判断三条边能否构成三角形的函数:首先三角形要没出现过,其次每条边长度一定要比0大,并且两边之和大于第三边 return !h[a * 100 + b] && a&&b&&c&&a + b>c&&a + c>b&&b + c>a && (h[a * 100 + b] = true); } int dfs(int index, int a, int b, int c) { /*枚举每根木棍放到三堆里的某一堆中,直到把所有木棍都分入三堆,再去判断三堆各自总长是否构成不重复的三角形。 要保存的值index表示枚举到第几根木棍,a b c表示三堆木棍当前的总长*/ if (index == n)/*深搜的两个重要元素:一是递归,一是终止。index值加到木棍总数量n时,所有木棍都放入堆中所以终止*/ { return a<b && b<c && is_triangle(a, b, c); }//否则尝试分别放入的情况 return dfs(index + 1, a + l[index], b, c) + dfs(index + 1, a, b + l[index], c) + dfs(index + 1, a, b, c + l[index]); } int main() { int T; scanf("%d", &T); while (T--) { scanf("%d", &n); for (int i = 0; i<n; ++i) { scanf("%d", &l[i]); } memset(h, 0, sizeof(h)); printf("%d\n", dfs(0, 0, 0, 0)); } return 0; }
相关文章推荐
- 226. Invert Binary Tree
- C语言局部变量和全局变量
- maven 版本管理
- git reset soft,hard,mixed之区别深解
- test
- 格式化字符串漏洞简介
- phpmail
- SHU1954 Dispsy loves flowers
- PAT乙级题目1002构思的改进和实践
- 从头认识java-13.10 边界的作用
- 分享几种常见WEB服务器配置方案
- MVC 架构设计
- 【ahk】为招商证券通达信版增加热键显隐跳空缺口,热键ctrl+
- Linux无线网络设置(wpa_supplicant的使用)
- 40个Java多线程问题总结
- Bash远程文件传输命令scp
- 递归(c++)(转)
- .net MVC BundleConfig.cs 合并js和css文件说明文档
- 模式实现库函数strcpy,注意函数参数,返回值设计。参数检测
- 第十三章mvc模式与php框架