📄 queendlg.cpp
字号:
CTimeSpan wholeTime=m_tEnd-m_tStart;
CString str;
str=time.Format("%H:%M:%S");
SetDlgItemText(IDC_ENDTIME,str);
str=wholeTime.Format("%H:%M:%S");
SetDlgItemText(IDC_TOTALTIME,str);
KillTimer(1);
return;
}
}
if(three<=7)
{
fc: while (three==two||three==two-1||three==two+1||three==one||three==one+2||three==one-2)
{
three++;
}
if (three>7)
{
three=1;
two++;
goto fb;
}
if(four<=7)
{
fd: while(four==three||four==three+1||four==three-1||four==two||four==two+2||four==two-2||four==one||four==one-3||four==one+3)
{
four++;
}
if (four>7)
{
four=1;
three++;
goto fc;
}
if(five<=7)
{
fe: while(five==four||five==four-1||five==four+1||five==three||five==three-2||five==three+2||five==two||five==two-3||five==two+3||five==one||five==one-4||five==one+4)
{
five++;
}
if (five>7)
{
five=1;
four++;
goto fd;
}
if(six<=7)
{
ff: while(six==five||six==five-1||six==five+1||six==four||six==four-2||six==four+2||six==three||six==three-3||six==three+3||six==two||six==two-4||six==two+4||six==one||six==one-5||six==one+5)
{
six++;
}
if (six>7)
{
six=1;
five++;
goto fe;
}
if(seven<=7)
{
while(seven==six||seven==six-1||seven==six+1||seven==five||seven==five-2||seven==five+2||seven==four||seven==four-3||seven==four+3||seven==three||seven==three-4
||seven==three+4||seven==two||seven==two-5||seven==two+5||seven==one||seven==one-6||seven==one+6)
{
seven++;
}
if (seven>7)
{
seven=1;
six++;
goto ff;
}
// 为了便于运算数组里
A[0]=one;
A[1]=two;
A[2]=three;
A[3]=four;
A[4]=five;
A[5]=six;
A[6]=seven;
//比较是否在同一列
flag=0;
for(int i=6;i>0;i--)
{
for(int j=0;j<i;j++)
if(A[i]==A[j])
{
flag=1;
break;
}
if(flag)
break;
}
if(!flag)//比较是否在对角线上
{
for( i=6;i>0;i--)
{
for(int j=0;j<i;j++)
{
m_recoder=A[i];
m_recoder1=A[j];
if(m_recoder1>m_recoder)
{
m_recoder1=8-m_recoder1;
m_recoder=8-m_recoder;
}
if(m_recoder-i==m_recoder1-j)
{
flag=1;
break;
}
}
if(flag) break;
}
}
if(!flag)
{
Invalidate();
total++;
SetDlgItemInt(IDC_EDIT2,total);
}
seven++;
if (seven==8)
{
seven=1;
six++;
if (six==8)
{
six=1;
five++;
if (five==8)
{
five=1;
four++;
if (four==8)
{
four=1;
three++;
if (three==8)
{
three=1;
two++;
if (two==8)
{
two=1;
one++;
if (one==8)
{
one=two=three=four=five=six=seven=1;
KillTimer(1);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
break;
case 3:
{
if (m_Judge1)
{
KillTimer(1);
solve(1);
m_num=m_LineNum.GetSize();
m_Judge1=FALSE;
}
break;
}
}
Invalidate();
CDialog::OnTimer(nIDEvent);
}
void CQueenDlg::OnPause()
{
// TODO: Add your control notification handler code here
CString str;
CTime time=CTime::GetCurrentTime();
if (GetDlgItemText(IDC_PAUSE,str),str=="暂停")
{
m_pauseBegin=time;
str=time.Format("%H:%M:%S");
SetDlgItemText(IDC_PAUSETIME,str);
m_pause++;
SetDlgItemInt(IDC_MANY,m_pause);
SetDlgItemText(IDC_PAUSE,"继续");
SetTimer(1,100,NULL);
KillTimer(1);
}
else
{
m_pauseEnd=time;
m_pauseTime=m_pauseEnd-m_pauseBegin;
m_pauseTime1+=m_pauseTime;
str=m_pauseTime1.Format("%H:%M:%S");
SetDlgItemText(IDC_WHOLEPAUSETIME,str);
SetDlgItemText(IDC_PAUSE,"暂停");
SetTimer(1,m_timer,NULL);
}
Invalidate();
}
void CQueenDlg::OnEditchangeCombo2()
{
// TODO: Add your control notification handler code here
UpdateData();
m_timer=GetDlgItemInt(IDC_COMBO2);
if (m_timer<=0)
{
m_timer=1;
}
else if (m_timer>1000)
{
m_timer=1000;
}
CString str,str1;
GetDlgItemText(IDC_START,str);
GetDlgItemText(IDC_PAUSE,str1);
if (str=="开始"||str=="重新开始"||str1=="结束了")
{
SetTimer(1,100,NULL);
KillTimer(1);
}
else
{
SetTimer(1,m_timer,NULL);
SetDlgItemText(IDC_PAUSE,"暂停");
}
}
void CQueenDlg::OnSelchangeCombo2()
{
// TODO: Add your control notification handler code here
UpdateData();
int index;
CString str,str1;
index=((CComboBox*)GetDlgItem(IDC_COMBO2))->GetCurSel();
((CComboBox*)GetDlgItem(IDC_COMBO2))->GetLBText(index,str);
m_timer=atoi(str);
GetDlgItemText(IDC_START,str);
GetDlgItemText(IDC_PAUSE,str1);
if (str=="开始"||str=="重新开始"||str1=="结束了")
{
SetTimer(1,100,NULL);
KillTimer(1);
}
else
{
SetTimer(1,m_timer,NULL);
SetDlgItemText(IDC_PAUSE,"暂停");
}
}
void CQueenDlg::OnBackdate()
{
// TODO: Add your command handler code here
SetDlgItemInt(IDC_EDIT2,0);
GetMenu()->GetSubMenu(0)->CheckMenuItem(2,MF_BYPOSITION|MF_CHECKED);
GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_UNCHECKED);
GetMenu()->GetSubMenu(0)->CheckMenuItem(1,MF_BYPOSITION|MF_UNCHECKED);
m_chose=3;
one=two=three=four=five=six=seven=1;
total=0;
flag=0;
m_Judge=TRUE;
m_pause=0;
m_pauseTime1=0;
m_num1=0;
}
void CQueenDlg::OnRansack()
{
// TODO: Add your command handler code here
SetDlgItemInt(IDC_EDIT2,0);
GetMenu()->GetSubMenu(0)->CheckMenuItem(1,MF_BYPOSITION|MF_CHECKED);
GetMenu()->GetSubMenu(0)->CheckMenuItem(2,MF_BYPOSITION|MF_UNCHECKED);
GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_UNCHECKED);
m_chose=2;
one=two=three=four=five=six=seven=1;
total=0;
flag=0;
m_Judge=TRUE;
m_pause=0;
m_pauseTime1=0;
}
void CQueenDlg::OnDirect()
{
// TODO: Add your command handler code here
SetDlgItemInt(IDC_EDIT2,0);
GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);
GetMenu()->GetSubMenu(0)->CheckMenuItem(1,MF_BYPOSITION|MF_UNCHECKED);
GetMenu()->GetSubMenu(0)->CheckMenuItem(2,MF_BYPOSITION|MF_UNCHECKED);
m_chose=1;
one=two=three=four=five=six=seven=1;
total=0;
flag=0;
m_Judge=TRUE;
m_pause=0;
m_pauseTime1=0;
}
void CQueenDlg::solve(int i)
{
UpdateData();
int j=0;
int num,num1;
CString str1,str2;
for(j=1;j<=7;j++)
{
if ( row[j] && rightUp[i+j-2] && leftUp[i-j+7])
{
row[j]=false;
rightUp[i+j-2]=false;
leftUp[i-j+7]=false;
LineNum[i]=j;
static char ch[10];
static CString str;
itoa(i,ch,10);
str=ch;
m_LineNum1.Add(str);
itoa(j,ch,10);
str=ch;
m_LineNum.Add(str);
num=m_LineNum1.GetSize();
for (int l=num-1;l>=0;l--)
{
if (m_LineNum1.GetAt(l)=="#"||l==0)
{
num1=l+1;
break;
}
}
for (int k=num1;k<num;k++)
{
if (m_LineNum1.GetAt(num-1)==m_LineNum1.GetAt(k))
{
m_LineNum1.Add("#");
m_LineNum.Add(" ");
str1=m_LineNum1.GetAt(num-1);
str2=m_LineNum.GetAt(num-1);
m_LineNum.RemoveAt(num-1);
m_LineNum1.RemoveAt(num-1);
if (num1==1)
{
for (int l=0;l<k;l++)
{
m_LineNum1.Add(m_LineNum1.GetAt(l));
m_LineNum.Add(m_LineNum.GetAt(l));
}
}
else
{
for (int l=num1;l<k;l++)
{
m_LineNum1.Add(m_LineNum1.GetAt(l));
m_LineNum.Add(m_LineNum.GetAt(l));
}
}
m_LineNum1.Add(str1);
m_LineNum.Add(str2);
break;
}
}
if(i==7)
{
m_LineNum1.Add("$");
m_LineNum.Add("$");
}
else
solve(i+1);
row[j]=true;
rightUp[j+i-2]=true;
leftUp[i-j+7]=true;
}
}
if (m_Judge2)
{
SetTimer(1,m_timer,NULL);
}
}
void CQueenDlg::OnAuto()
{
// TODO: Add your command handler code here
m_Judge2=TRUE;
SetDlgItemText(IDC_START,"开始");
SetDlgItemText(IDC_PAUSE,"暂停");
((CButton*)GetDlgItem(IDC_START))->EnableWindow(TRUE);
GetMenu()->GetSubMenu(1)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);
GetMenu()->GetSubMenu(1)->CheckMenuItem(1,MF_BYPOSITION|MF_UNCHECKED);
one=two=three=four=five=six=seven=1;
total=0;
SetDlgItemInt(IDC_EDIT2,0);
memset(A,1,7);
m_Judge=TRUE;
m_num1=0;
}
void CQueenDlg::OnOnestep()
{
// TODO: Add your command handler code here
m_Judge2=FALSE;
SetDlgItemText(IDC_START,"下一步");
SetDlgItemText(IDC_PAUSE,"暂停");
((CComboBox*)GetDlgItem(IDC_COMBO2))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_START))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_PAUSE))->EnableWindow(FALSE);
KillTimer(1);
GetMenu()->GetSubMenu(1)->CheckMenuItem(1,MF_BYPOSITION|MF_CHECKED);
GetMenu()->GetSubMenu(1)->CheckMenuItem(0,MF_BYPOSITION|MF_UNCHECKED);
one=two=three=four=five=six=seven=1;
total=0;
SetDlgItemInt(IDC_EDIT2,0);
memset(A,1,7);
m_Judge=TRUE;
m_num1=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -