📄 solution.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 + -