码迷,mamicode.com
首页 > 编程语言 > 详细

c++数三角

时间:2015-07-29 14:03:39      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

技术分享

好大的一个图片有木有,哈哈,题目来了,数出上述图形中的三角形个数。


我真的曾经十分认真的数过,我按照组成多边形的三角形的个数,从1-9依次数来,但是很悲催,我把一个多边形组成的三角形数出了九个(汗一个,我姥姥都知道只有五个),结果数出了28个。最终用代码确认结果,只有24个,仔细检查下,才发现这个错误。下面是我用c11写的代码,不得不说c11中的不少新语法,真心很好用。



#include <iostream>
#include <vector>
#include <algorithm>
#include <stdarg.h>  

using namespace std;
typedef int VERTEX;
typedef vector<VERTEX> LINE;	// 共线的n个点为一条边

typedef struct _graph{
	vector<VERTEX>	_vertexes;
	vector<LINE>	_lines;
}GRAPH;

GRAPH g_graph;
int g_count = 0;

bool in_same_line(VERTEX va, VERTEX vb)
{
	auto itor = g_graph._lines.begin();
	while(itor != g_graph._lines.end())
	{
		if (find(itor->begin(), itor->end(), va) != itor->end() &&
			find(itor->begin(), itor->end(), vb) != itor->end())
		{
			return true;
		}

		itor++;
	}
	return false;
}

bool in_same_line(VERTEX va, VERTEX vb, VERTEX vc)
{
	auto itor = g_graph._lines.begin();
	while(itor != g_graph._lines.end())
	{
		if (find(itor->begin(), itor->end(), va) != itor->end() &&
			find(itor->begin(), itor->end(), vb) != itor->end() &&
			find(itor->begin(), itor->end(), vc) != itor->end())
		{
			return true;
		}

		itor++;
	}
	return false;
}

void add_vertex(int index, ...)
{
	va_list argptr;  
	va_start(argptr, index); //初始化变元指针  
	int sum = index;  
	index = va_arg(argptr, int); //作为下一个参数类型的参数类型,返回不定参数  
	while(1) //末尾特定字符指示结束  
	{  
		g_graph._vertexes.push_back(index);
		index = va_arg(argptr, int);  

		if (index>10)
		{
			break;
		}
	}
	va_end(argptr);  
}

// 添加一条边
void add_side(int vertex, ...)
{
	va_list argptr;  
	va_start(argptr, vertex); //初始化变元指针  
	int sum = vertex;  
	vertex = va_arg(argptr, int); //作为下一个参数类型的参数类型,返回不定参数  

	LINE line;
	//c保存第一个不定参数  
	while(1) //末尾特定字符指示结束  
	{  
		line.push_back(vertex);
		vertex = va_arg(argptr, int);  

		if (vertex>10)
		{
			break;
		}
	}
	va_end(argptr);  

	g_graph._lines.push_back(line);
}

// 初始化图
void init()
{
	// 添加顶点
	add_vertex(0,1,2,3,4,5,6,7,8,9,10);

	// 添加线段
	add_side(0,1,7);
	add_side(0,2,6,8);
	add_side(0,3,5,9);
	add_side(0,4,10);
	add_side(1,2,3,4);
	add_side(4,5,6,7);
	add_side(7,8,9,10);
}

// 计算三角形的个数
void count()
{
	auto vertexes = g_graph._vertexes;
	for (size_t i=0; i<vertexes.size(); i++)
	{
		for (size_t j=i+1; j<vertexes.size(); j++)
		{
			for (size_t k=j+1; k<vertexes.size(); k++)
			{
				if (in_same_line(i,j) &&
					in_same_line(i,k) &&
					in_same_line(j,k) &&
					!in_same_line(i,j,k))
				{
					g_count++;
				}
			}
		}
	}
}

void main()
{
	init();

	count();

	cout<<g_count;

	system("pause");
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

c++数三角

标签:

原文地址:http://blog.csdn.net/fukainankai/article/details/47126445

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!