n皇后之MFC图形界面展示
n 皇后问题研究的是如何将 n 个皇后放置在 n×n的棋盘上,并且使皇后彼此之间不能相互攻击。这里采用回溯法求解。MFC应用程序主要要修改的两个文件如下。
// GDIDlg.h: 头文件
//
#pragma once
// CGDIDlg 对话框
class CGDIDlg : public CDialogEx
{
// 构造
public:
CGDIDlg(CWnd* pParent = nullptr); // 标准构造函数
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum {
IDD = IDD_GDI_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButton1();
afx_msg void OnEnChangeEdit1();
void queen(int n);
bool testplace(int i);
void display();
private:
int n, row, col;
CString mStr;
};
static int count = 0;
const int N = 20;
// GDIDlg.cpp: 实现文件
//
#include "pch.h"
#include "framework.h"
#include "GDI.h"
#include "GDIDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
int q[N];
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum {
IDD = IDD_ABOUTBOX };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected