⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 solution.cpp

📁 爱因斯坦谜题
💻 CPP
字号:
// Solution.cpp: implementation of the CSolution class.
//
//////////////////////////////////////////////////////////////////////

#include "SolutionSet.h"

CSolution::CSolution()
{
}

void CSolution::Show(CString &buf)
{
	CString m;

	buf = "";
	for (int i=0; i<MAGIC_NUM; i++) {
		m_persions[i].Show(m);
		buf += m;
	}
}

void CSolution::Show()
{
	CString buf;
	Show(buf);
	printf("%s", buf);
}

void CSolution::Init(const CHint &hint)
{
	for (int i=0; i<MAGIC_NUM; i++) {
		if (m_persions[i].IsEmpty()) {
			m_persions[i].Set(hint);
			return;
		}
	}
}

void CSolution::ApplyHint(const CHint &hint, CSolutionSet &output) const
{
	CPerson person;
	CSolution sln;

	for (int i=0; i<MAGIC_NUM; i++) {
		sln = *this;
		person = m_persions[i];
		if (person.ApplyHint(hint)) {
			sln.m_persions[i] = person;
			sln.FillLastAttr(hint.v1.attr);
			sln.FillLastAttr(hint.v2.attr);
			output.Add(sln);
		}
	}
}

bool CSolution::HasAttrVal(const CAttributeVal &attr) const
{
	for (int i=0; i<MAGIC_NUM; i++) {
		if (m_persions[i].HasAttrVal(attr)) {
			return true;
		}
	}
	return false;
}

void CSolution::EnumAttr(const CAttributeVal &attr_val, CSolutionSet &output) const
{
	CPerson person;
	CSolution sln;

	for (int i=0; i<MAGIC_NUM; i++) {
		sln = *this;
		person = m_persions[i];
		if (!person.GetAttr(attr_val.attr)) {
			person.SetAttr(attr_val);
			sln.m_persions[i] = person;
			sln.FillLastAttr(attr_val.attr);
			output.Add(sln);
		}
	}
}

int CSolution::GetHouse(const CAttributeVal &attr) const
{
	for (int i=0; i<MAGIC_NUM; i++) {
		if (m_persions[i].HasAttrVal(attr)) {
			return m_persions[i].GetAttr(ORDERED_ATTR);
		}
	}
	return 0;
}

void CSolution::FillLastAttr(int attr)
{
	int last_val = 1+2+3+4+5;
	int unknown_cnt = 0;
	int unknown_index;

	for (int i=0; i<MAGIC_NUM; i++) {
		int val = m_persions[i].GetAttr(attr);
		if (!val) {
			unknown_cnt++;
			if (unknown_cnt > 1) {
				break;
			}
			unknown_index = i;
		}
		else {
			last_val -= val;
		}
	}

	if (unknown_cnt==1) {
		CAttributeVal attr_val;
		attr_val.attr = attr;
		attr_val.val = last_val;
		m_persions[unknown_index].SetAttr(attr_val);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -