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

📄 queendlg.cpp

📁 八皇后演示程序,VC6.0开发环境 初学c++ 望指正
💻 CPP
📖 第 1 页 / 共 3 页
字号:
						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 + -