题目:请说出下面图形中包含多少个三角形?请用一个程序完成计算。

C++版本

 1 #include<iostream>
 2
 3 using namespace std;
 4
 5 const char NO_POINT = '0';
 6
 7 //任意的一条线
 8 const char *map[] = { "ad","ab","db","ae","aj","ah","ej","eh","jh","af","ak","ai","fk","fi","ki","ag","ac","gc",
 9 "de","df","dg","ef","eg","fg","bj","bk","bg","jk","jg","kg","bh","bi","bc","hi","hc","ic" };
10 //共线的点
11 const char *line[] = { "adb","aejh","afki","agc","defg","bjkg","bhic" };
12
13 //点是否在线上
14 int contain( const char *str, char a) {
15     int i = 0;
16     while (str[i] != '\0') {        //注意字符使用单引号,字符串是双引号
17         if (str[i] == a)
18             return 1;
19         i++;
20     }
21     return 0;
22 }
23
24 //三个点是否在一条线上函数
25 int isInALine(const char *str[], char a, char b, char c) {
26     int i ;
27     for (i = 0; i < 7; i++) {
28         if (contain(str[i], a) && contain(str[i], b) && contain(str[i], c)) {
29             return 1;
30         }
31     }
32     return 0;
33 }
34
35 //两条线的交点函数
36 char getCrossPoint(const char *str1, const char *str2) {
37     if (*str1 == *str2)
38         return *str1;
39     if (*str1 == *(str2 + 1))
40         return *str1;
41     if (*(str1 + 1) == *str2)
42         return *(str1 + 1);
43     if (*(str1 + 1) == *(str2 + 1))
44         return *(str1 + 1);
45     return NO_POINT;
46 }
47
48 //三条线两两必须有交点,并且三条线不能共线才能构成三角形。
49 int isTriangle(const char *str1, const char *str2, const char *str3) {
50     char Point1, Point2, Point3;
51     Point1 = getCrossPoint(str1, str2);
52     if (Point1 == NO_POINT)
53         return 0;
54     Point2 = getCrossPoint(str1, str3);
55     if (Point2 == NO_POINT)
56         return 0;
57     Point3 = getCrossPoint(str2, str3);
58     if (Point3 == NO_POINT)
59         return 0;
60     if (isInALine(line, Point1, Point2, Point3))
61         return 0;
62     return 1;
63 }
64
65 int getTriangelCount( const char *str[]) {
66     int i, j, k,count=0;
67     for (i = 0; i < 36; i++) {
68         for (j = i+1; j < 36; j++) {
69             for (k = j+1; k < 36; k++) {
70                 if (isTriangle(str[i], str[j], str[k]))
71                     count++;
72             }
73         }
74     }
75     return count;
76 }
77
78 int main(int argc, char *argv[]) {
79     cout << getTriangelCount(map);
80     getchar();
81     return 0;
82 }

解题思路:

(1)给每个交点做标记,如下:

(2)总共有36条线段,如果三条线段两两之间存在交点,但一条线上(已经包含了三条线交于同一点),则可以构成三角形。如下图所示,最左边的构成三角形,右边两个不构成三角形:

(3)故需要有如下一些子函数:求两条线的交点,三个点是否共线等。

转载于:https://www.cnblogs.com/ys99/p/9314510.html

经典算法详解(10)图中有多少个三角形相关推荐

  1. 经典算法详解--CART分类决策树、回归树和模型树

    Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Reg ...

  2. 机器学习10大经典算法详解

    "数据+算法=模型". 面对具体的问题,选择切合问题的模型进行求解十分重要.有经验的数据科学家根据日常算法的积累,往往能在最短时间内选择更适合该问题的算法,因此构建的模型往往更准确 ...

  3. 机器学习经典算法详解及Python实现--元算法、AdaBoost

    http://blog.csdn.net/suipingsp/article/details/41822313 第一节,元算法略述 遇到罕见病例时,医院会组织专家团进行临床会诊共同分析病例以判定结果. ...

  4. 经典算法详解(8)数的分组

    题目:有10个任意的正整数,将其分为两组A和B,要求组A中每个数据的和与组B中每个数据的和之差的绝对值最小.请设计算法实现数的分组(找出一个答案即可). C++版本: 1 #include<io ...

  5. 经典算法详解 之 递归算法

    递归算法:递归算法是把问题转化为规模缩小了的同类问题的子问题.然后递归调用函数(或过程)来表示问题的解. 递归算法是算法设计中比较常用的一种算法,它的优点在于考虑问题的角度不再局限于过程,而是从整体的 ...

  6. 经典算法详解(2)寻找数组中的次大数

    题目:10个互不相等的整数,求其中的第2大的数字,要求数组不能用排序,设计的算法效率越高越好. 1 #include<iostream> 2 3 using namespace std; ...

  7. sporadic偶发实时任务多核分区动态优先级EDF(或者DM)调度(以及可调度性分析)经典算法详解

    sporadic任务的概念:实时任务分类与术语_标biao的博客-CSDN博客,也就是任务的截止期可以小于周期. with no loss of generality,任务集为封闭任务集,不会运行时动 ...

  8. 起名算法 php,PHP实现各种经典算法详解

    //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, ...

  9. AnchorFree系列算法详解

    目录 前言 一.Anchor-Based方法回顾 二.Anchor Free系列方法简介 1. Anchor Free系列算法历史 2. Anchor free经典算法详解 2.1. 基于关键点的An ...

最新文章

  1. “玻璃大王”曹德旺捐资100亿办大学!
  2. OvS、OvS-DPDK、VPP 基准性能对比
  3. linux与windows回车换行符的区别
  4. 实例19:python
  5. android fragment 教程,Android Fragment教程总结
  6. 为什么叫C++而不叫++C ?
  7. linux 无线 扫描不到网络,在Ubuntu笔记本上搜不到无线信号的解决办法
  8. Apache 配置里面使用 Win32DisableAcceptEx ,Apache 启动不了
  9. Error response from daemon: driver failed programming external connectivity on endpoint xenodochial_
  10. javascript_video_2
  11. 《山水情》------中国水墨山水动画的颠峰与极至
  12. Phonetic symbol 单元音 - 长元音 -- ɜː (新) / ə: (旧) 与 ɔː
  13. 网页版番茄时钟的制作——Pomodoro Clock
  14. Oracle事件诊断列表
  15. Java工具集-MD5加密工具
  16. 个人搭建网站要如何选择服务器?
  17. 【音视频】流媒体直播实时视频延迟时间排查和剖析:gop关键帧间隔导致延迟,流媒体和播放器缓存,B帧等导致的延迟
  18. QGIS创建专题地图
  19. redis集群节点宕机 fail状态 redis的投票机制实测
  20. AAAI 2018文章 Representation Learning for Scale-free Networks 翻译

热门文章

  1. 联咏(Novatek)数码夜视仪/红外热像仪/望远镜相机解决方案
  2. 【线性代数】6-2:对角化(Diagonalizing a Matrix)
  3. 一个14年前【取名软件】的简单逆向过程
  4. c语言求一年中的多少天
  5. 【整理分享】需求工程 课后练习题
  6. Windows 沙盒配置
  7. 社区出品|LGTM :数据圈内的周度「热点精选」
  8. 毕业三年财富自由,杭州95后小伙准备30岁退休
  9. 完全背包 nyoj311
  10. iOS上架App Store详细图文教程