当前位置: 首页 > news >正文

基于QT和C++实现的中国象棋

一,源码

board.h

#ifndef BOARD_H
#define BOARD_H#include <QWidget>
#include "Stone.h"class Board : public QWidget
{Q_OBJECT
public:explicit Board(QWidget *parent = 0);bool _bRedTurn; // 红方先走int _currentPlayer; // 当前玩家,1为红方,-1为黑方Stone _s[32];int _r; /* 棋子的半径 */int _selectid;/* 返回象棋棋盘行列对应的像素坐标 */QPoint center(int row, int col);QPoint center(int id);bool getRowCol(QPoint pt, int& row, int& col);void drawStone(QPainter& painter, int id);void paintEvent(QPaintEvent *);void mouseReleaseEvent(QMouseEvent *);bool canMove(int moveid, int row, int col, int killid);bool canMoveJIANG(int moveid, int row, int col, int killid);bool canMoveSHI(int moveid, int row, int col, int killid);bool canMoveXIANG(int moveid, int row, int col, int killid);bool canMoveCHE(int moveid, int row, int col, int killid);bool canMoveMA(int moveid, int row, int col, int killid);bool canMovePAO(int moveid, int row, int col, int killid);bool canMoveBING(int moveid, int row, int col, int killid);bool isStoneAt(int row, int col);void saveGameState();
signals:public slots:};#endif // BOARD_H

Stone.h

#ifndef STONE_H
#define STONE_H#include <QString>class Stone
{
public:Stone();~Stone();int getRow()const{return _row;}int getCol()const{return _col;}enum TYPE{JIANG, CHE, PAO, MA, BING, SHI, XIANG};int _row;int _col;TYPE _type;int _id;bool _dead;bool _red;void init(int id){struct {int row, col;Stone::TYPE type;} pos[16] = {{0, 0, Stone::CHE},{0, 1, Stone::MA},{0, 2, Stone::XIANG},{0, 3, Stone::SHI},{0, 4, Stone::JIANG},{0, 5, Stone::SHI},{0, 6, Stone::XIANG},{0, 7, Stone::MA},{0, 8, Stone::CHE},{2, 1, Stone::PAO},{2, 7, Stone::PAO},{3, 0, Stone::BING},{3, 2, Stone::BING},{3, 4, Stone::BING},{3, 6, Stone::BING},{3, 8, Stone::BING},};_id = id;_dead = false;_red = id<16;if(id < 16){_row = pos[id].row;_col = pos[id].col;_type = pos[id].type;}else{_row = 9-pos[id-16].row;_col = 8-pos[id-16].col;_type = pos[id-16].type;}}QString getText(){switch(this->_type){case CHE:return "车";case MA:return "马";case PAO:return "炮";case BING:return "兵";case JIANG:return "将";case SHI:return "士";case XIANG:return "相";}return "错误";}
};#endif // STONE_H

board.cpp

#include "Board.h"
#include <QPainter>
#include <QMouseEvent>
#include <QMessageBox>
#include<QTextStream>
Board::Board(QWidget *parent) :QWidget(parent){for(int i=0; i<32; ++i){_s[i].init(i);}_selectid = -1;_bRedTurn = true;
}void Board::paintEvent(QPaintEvent*)
{QPainter painter(this);int d = 40;_r = d / 2;// 画10横线for (int i = 1; i <= 10; ++i){painter.drawLine(QPoint(d, i * d), QPoint(9 * d, i * d));}// 画9竖线for (int i = 1; i <= 9; ++i){if (i == 1 || i == 9)painter.drawLine(QPoint(i * d, d), QPoint(i * d, 10 * d));else{painter.drawLine(QPoint(i * d, d), QPoint(i * d, 5 * d));painter.drawLine(QPoint(i * d, 6 * d), QPoint(i * d, 10 * d));}}// 九宫格painter.drawLine(QPoint(4 * d, 1 * d), QPoint(6 * d, 3 * d));painter.drawLine(QPoint(6 * d, 1 * d), QPoint(4 * d, 3 * d));painter.drawLine(QPoint(4 * d, 8 * d), QPoint(6 * d, 10 * d));painter.drawLine(QPoint(6 * d, 8 * d), QPoint(4 * d, 10 * d));// 绘制32个棋子for (int i = 0; i < 32; ++i){drawStone(painter, i);}
}QPoint Board::center(int row, int col)
{QPoint ret;ret.rx() = (col + 1) * _r * 2;ret.ry() = (row + 1) * _r * 2;return ret;
}QPoint Board::center(int id)
{return center(_s[id]._row, _s[id]._col);
}void Board::drawStone(QPainter& painter, int id)
{if (_s[id]._dead)return;QPoint c = center(id);QRect rect = QRect(c.x() - _r, c.y() - _r, _r * 2, _r * 2);if (id == _selectid)painter.setBrush(QBrush(Qt::gray));elsepainter.setBrush(QBrush(Qt::yellow));painter.setPen(Qt::black);painter.drawEllipse(center(id), _r, _r);if (_s[id]._red)painter.setPen(Qt::red);painter.setFont(QFont("system", _r, 700));painter.drawText(rect, _s[id].getText(), QTextOption(Qt::AlignCenter));
}bool Board::getRowCol(QPoint pt, int& row, int& col)
{for (row = 0; row <= 9; row++){for (col = 0; col <= 8; col++){QPoint c = center(row, col);int dx = c.x() - pt.x();int dy = c.y() - pt.y();int dist = dx * dx + dy * dy;if (dist < _r * _r)return true;}}return false;
}bool Board::isStoneAt(int row, int col)
{for (int i = 0; i < 32; ++i){if (_s[i]._row == row && _s[i]._col == col && !_s[i]._dead){return true;}}return false;
}bool Board::canMoveXIANG(int moveid, int row, int col, int killid)
{int fromRow = _s[moveid]._row;int fromCol = _s[moveid]._col;int toRow = row;int toCol = col;if (_s[moveid]._red && toRow > 4) return false; // 红方象不能过河if (!_s[moveid]._red && toRow < 5) return false; // 黑方象不能过河int rowDir = toRow - fromRow;int colDir = toCol - fromCol;if (abs(rowDir) != 2 || abs(colDir) != 2) return false;int checkRow = fromRow + rowDir / 2;int checkCol = fromCol + colDir / 2;if (isStoneAt(checkRow, checkCol)) return false; // 路径上有棋子if (killid != -1 && _s[killid]._red == _s[moveid]._red) return false;return true;
}bool Board::canMoveCHE(int moveid, int row, int col, int killid)
{int fromRow = _s[moveid]._row;int fromCol = _s[moveid]._col;int toRow = row;int toCol = col;if (fromRow != toRow && fromCol != toCol) return false;// 计算移动的方向int rowDir = fromRow < toRow ? 1 : (fromRow > toRow ? -1 : 0);int colDir = fromCol < toCol ? 1 : (fromCol > toCol ? -1 : 0);int checkRow = fromRow + rowDir;int checkCol = fromCol + colDir;while (checkRow != toRow || checkCol != toCol){if (isStoneAt(checkRow, checkCol)) return false; // 路径上有棋子checkRow += rowDir;checkCol += colDir;}// 如果有棋子被吃,检查是否是对方的棋子if (killid != -1 && _s[killid]._red == _s[moveid]._red) return false;return true;
}
bool Board::canMoveMA(int moveid, int row, int col, int killid)
{int fromRow = _s[moveid]._row;int fromCol = _s[moveid]._col;int toRow = row;int toCol = col;int rowDiff = toRow - fromRow;int colDiff = toCol - fromCol;// 检查移动是否是“日”字形状if ((abs(rowDiff) == 2 && abs(colDiff) == 1) || (abs(rowDiff) == 1 && abs(colDiff) == 2)){// 检查是否有棋子蹩马腿int legRow = fromRow + (rowDiff > 0 ? (rowDiff / 2) : -(abs(rowDiff) / 2));int legCol = fromCol + (colDiff > 0 ? (colDiff / 2) : -(abs(colDiff) / 2));if (!isStoneAt(legRow, legCol)) // 如果没有棋子蹩马腿{// 如果有棋子被吃,检查是否是对方的棋子if (killid != -1 && _s[killid]._red != _s[moveid]._red){return true; // 可以吃掉对方的棋子}else if (killid == -1){return true;}}}return false; // 不满足移动条件
}bool Board::canMovePAO(int moveid, int row, int col, int killid)
{int fromRow = _s[moveid]._row;int fromCol = _s[moveid]._col;int toRow = row;int toCol = col;if (fromRow != toRow && fromCol != toCol) return false;int rowDir = fromRow < toRow ? 1 : (fromRow > toRow ? -1 : 0);int colDir = fromCol < toCol ? 1 : (fromCol > toCol ? -1 : 0);// 检查移动路径上是否有其他棋子int checkRow = fromRow + rowDir;int checkCol = fromCol + colDir;int jumpCount = 0;while (checkRow != toRow || checkCol != toCol){if (isStoneAt(checkRow, checkCol)) jumpCount++;checkRow += rowDir;checkCol += colDir;}if (killid != -1){if (_s[killid]._red == _s[moveid]._red) return false;if (jumpCount != 1) return false; // 必须跳过一个棋子}else{if (jumpCount != 0) return false; // 如果没有吃子,不能跳过棋子}return true;
}bool Board::canMoveBING(int moveid, int row, int col, int killid)
{int fromRow = _s[moveid]._row;int fromCol = _s[moveid]._col;int toRow = row;int toCol = col;if (fromRow != toRow && fromCol != toCol) return false;int rowDiff = toRow - fromRow;int colDiff = toCol - fromCol;// 检查是否过河if (_s[moveid]._red && toRow >= 5) // 红方兵过河{if (abs(rowDiff) != 1) return false; // 过河后只能直走一格}else if (!_s[moveid]._red && toRow <= 4) // 黑方兵过河{if (abs(rowDiff) != 1) return false; // 过河后只能直走一格}else // 未过河{if (abs(rowDiff) != 1) return false; // 未过河只能直走一格}if (killid != -1 && _s[killid]._red == _s[moveid]._red) return false;}bool Board::canMoveJIANG(int moveid, int row, int col, int killid)
{if (_s[moveid]._red){if (row > 2)return false;}else{if (row < 7)return false;}if (col < 3) return false;if (col > 5) return false;int rowDir = _s[moveid]._row - row;int colDir = _s[moveid]._col - col;int d = abs(rowDir) * 10 + abs(colDir);if (d == 1 || d == 10)return true;return false;
}bool Board::canMoveSHI(int moveid, int row, int col, int killid)
{if (_s[moveid]._red){if (row > 2)return false;}else{if (row < 7)return false;}if (col < 3) return false;if (col > 5) return false;int rowDir = _s[moveid]._row - row;int colDir = _s[moveid]._col - col;int d = abs(rowDir) * 10 + abs(colDir);if (d == 11)return true;return false;}bool Board::canMove(int moveid, int row, int col, int killid)
{// 如果移动的棋子和被吃的棋子颜色相同,则切换选择if (_s[moveid]._red == _s[killid]._red && killid != -1){_selectid = killid;update();return false;}// 判断是否是主将被吃if (_s[killid]._type == Stone::JIANG && _s[killid]._red != _s[moveid]._red){QString winner = _s[moveid]._red ? "红方" : "黑方";QMessageBox::information(this, "胜利", "恭喜," + winner + "赢了!");return false; // 停止游戏}// 根据棋子类型调用相应的移动规则函数switch (_s[moveid]._type){case Stone::JIANG:return canMoveJIANG(moveid, row, col, killid);break;case Stone::SHI:return canMoveSHI(moveid, row, col, killid);break;case Stone::XIANG:return canMoveXIANG(moveid, row, col, killid);break;case Stone::CHE:return canMoveCHE(moveid, row, col, killid);break;case Stone::MA:return canMoveMA(moveid, row, col, killid);break;case Stone::PAO:return canMovePAO(moveid, row, col, killid);break;case Stone::BING:return canMoveBING(moveid, row, col, killid);break;default:return false;}return true;
}void Board::saveGameState() {// 假设你有一个数组来存储棋盘的状态,比如棋子的类型和位置QString fileName = "game_state.txt";QFile file("game.txt");if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {QMessageBox::critical(this, "保存棋局状态", "无法打开文件进行保存!");return;}QTextStream out(&file);for (int i = 0; i < 32; ++i) {out << _s[i].getText() << "," << _s[i].getRow() << "," << _s[i].getCol() << "\n";}file.close();QMessageBox::information(this, "保存棋局状态", "棋局状态已成功保存!");
}void Board::mouseReleaseEvent(QMouseEvent *ev)
{QPoint pt = ev->pos();// 将pt转化成象棋的行列值// 判断这个行列值上面有没有棋子int row, col;bool bRet = getRowCol(pt, row, col);if(bRet == false) // 点到棋盘外return;int i;int clickid = -1;for(i=0;i<32;++i){if(_s[i]._row == row && _s[i]._col == col && _s[i]._dead== false){clickid = i;break;}}if(_selectid == -1){if(clickid != -1){if(_bRedTurn == _s[clickid]._red){_selectid = clickid;update();}}}else{if(canMove(_selectid, row, col, clickid)){/*走棋*/_s[_selectid]._row = row;_s[_selectid]._col = col;if(clickid != -1){_s[clickid]._dead = true;}_selectid = -1;_bRedTurn = !_bRedTurn;update();}else{// 不能移动棋子,给出提示QMessageBox::information(this, "提示", "该棋子不能移动到指定的位置!");// 如果点击的是另一个相同颜色的棋子,则切换选择if(clickid != -1 && _s[clickid]._red == _s[_selectid]._red){_selectid = clickid;update();}else{_selectid = -1; // 取消选择update();}}}}

main.cpp


#include <QApplication>
#include "Board.h"int main(int argc, char* argv[])
{QApplication app(argc, argv);Board board;board.show();return app.exec();
}

Stone.cpp

#include "Stone.h"Stone::Stone()
{}Stone::~Stone()
{}

二,具体分析

棋盘的绘制,棋子的绘制,以及选中棋子进行一系列操作都使用QT的库函数,所以在创建

board类时我们需要选择基于Qwidge作为父类

board.cpp是实现绘制棋盘,棋子,以及棋子运行逻辑的文件

Stone.h包含了棋子类

三,运行展示

相关文章:

基于QT和C++实现的中国象棋

一&#xff0c;源码 board.h #ifndef BOARD_H #define BOARD_H#include <QWidget> #include "Stone.h"class Board : public QWidget {Q_OBJECT public:explicit Board(QWidget *parent 0);bool _bRedTurn; // 红方先走int _currentPlayer; // 当前玩家&…...

Mojo崛起:AI-first 的编程语言能否成为新流行?

眨眼之间&#xff0c;你可能会错过又一种编程语言的发明。 有个笑话说&#xff0c;程序员花费20%的时间编写代码&#xff0c;80%的时间决定使用什么语言。 事实上&#xff0c;编程语言如此之多&#xff0c;以至于我们不确定实际有多少种。据估计&#xff0c;至少有700种编程语…...

【数据结构与算法】哈夫曼树与哈夫曼编码

文章目录 哈夫曼树&#xff08;最优二叉树&#xff09;定义举个&#x1f330;&#xff08;WPL的计算&#xff09; 哈夫曼树的构造&#xff08;最优二叉树的构造&#xff09;举个&#x1f330; 哈夫曼树的性质 哈夫曼编码定义构造 哈夫曼树&#xff08;最优二叉树&#xff09; …...

基于多头注意力机制卷积神经网络结合双向门控单元CNN-BIGRU-Mutilhead-Attention实现柴油机故障诊断附matlab代码

在使用这些深度学习库时&#xff0c;你可以按照以下步骤构建CNN-BIGRU-Multihead-Attention模型&#xff1a; 导入所需的库和模块。例如&#xff0c;在使用TensorFlow时&#xff0c;你可以导入tensorflow库和其他需要的模块。 定义输入层。根据你的数据&#xff0c;定义适当的…...

k8s redis 单节点部署

k8s redis 单节点部署kubectl 执行脚本 kubectl --kubeconfig ~/.kube-rz-real/config apply -f redis-leader.yaml -n rz-dt vi redis-leader.yamlapiVersion: apps/v1 kind: Deployment metadata:name: redis-leader-deploylabels:app: redisrole: leadertier: backend sp…...

科普童话投稿

《科普童话》杂志是由国家新闻出版总署批准、黑龙江省教育厅主管、黑龙江省语言文字报刊社主办的正规期刊。《科普童话》以培养科学素养与创新探索精神为办刊宗旨&#xff0c;以科学与艺术统一为编辑方针&#xff0c;以科学教育、教育科学作为自己的出发点&#xff0c;致力于对…...

【Ardiuno】使用ESP32单片机创建web服务通过网页控制小灯开关的实验(图文)

经过实验测试ESP32单片机的网络连接还是很方便的&#xff0c;这里小飞鱼按照程序实例的代码亲自实验一下使用Esp32生成的网页服务来实现远程无线控制小灯开关功能&#xff0c;这样真的是离物联网开发越来越近了&#xff0c;哈哈&#xff01; 连接好开发板和电路&#xff0c;将…...

百元蓝牙耳机哪款音质最好?四款实力超群机型推荐

在蓝牙耳机市场竞争日益激烈的今天&#xff0c;百元级别的耳机已经具备了令人瞩目的音质表现&#xff0c;对于追求高性价比的消费者来说&#xff0c;如何在众多选项中挑选出一款音质卓越的蓝牙耳机&#xff0c;无疑是一项重要而又充满挑战的任务&#xff0c;今天我将为大家推荐…...

Linux系统之mtr命令的基本使用

Linux系统之mtr命令的基本使用 一、mtr命令介绍二、mtr命令使用帮助2.1 mtr命令的帮助信息2.2 mtr帮助信息解释 三、安装mtr工具四、mtr命令的基本使用4.1 直接使用4.2 设定ping次数4.3 禁用DNS解析4.4 显示IP地址4.5 调整间隔 五、总结 一、mtr命令介绍 mtr命令是一个网络诊断…...

实战tcpdump4.99.4交叉编译

主要是记录交叉编译的一个坑&#xff0c;不知道为什么网上的教程都没遇到过。 环境 libpcap 1.10.4tcpdump 4.99.4WSL 编译步骤 注意事项 注意解压的时候文件夹名需要是libpcap-1.10.4&#xff0c;由于我是在github直接下载zip的压缩包名是libpcap-libpcap-1.10.4.tar.gz解…...

重生奇迹MU召唤术师简介

出生地&#xff1a;幻术园 性 别&#xff1a;女 擅 长&#xff1a;召唤幻兽、辅助魔法&攻击魔法 转 职&#xff1a;召唤巫师&#xff08;3转&#xff09; 介 绍&#xff1a;从古代开始流传下来的高贵的血缘&#xff0c;为了种族纯正血缘的延续及特殊使用咒术的天赋&…...

神经网络模型---AlexNet

一、AlexNet 1.导入tensorflow库&#xff0c;这里给简称为tf库 import tensorflow as tf from tensorflow.keras import datasets, layers, modelsdatasets&#xff1a;是用于训练和测试机器学习模型的数据集合 layers&#xff1a;是构建神经网络模型的关键组成部分 models&a…...

corona渲染器与vray比哪个好?支持云渲染平台吗

​在视觉渲染技术领域&#xff0c;V-Ray和Corona都以其卓越的性能和广泛应用赢得了高度评价。这两款渲染器各有其独特的优势&#xff0c;使得在它们之间做出选择并非易事。不同的应用场景和用户需求可能会让它们各自展现出不同的优势。 一、corona渲染器跟vray怎么样 在比较V-…...

每日一练:攻防世界:Ditf

这是难度1的题吗&#xff1f;&#xff1f;&#xff1f; 拿到一个png图片&#xff0c;第一反应就是CRC爆破&#xff0c;结果还真的是高度被修改了 这里拿到一个字符串&#xff0c;提交flag结果发现不是&#xff0c;那么只可能是密钥之类的了 看看有没有压缩包&#xff0c;搜索…...

约瑟夫环递归算法详解与实现

一、引言 约瑟夫环问题是一个著名的理论问题&#xff0c;其背景是在古罗马时期&#xff0c;有n个犯人被围成一个圈&#xff0c;从第一个人开始报数&#xff0c;每次报到m的人将被处决&#xff0c;然后从下一个人开始重新报数&#xff0c;直到所有人都被处决。这个问题可以用递…...

互联网应用主流框架整合之构建REST风格的系统

REST&#xff08;Representational State Transfer&#xff09;&#xff0c;中文译为“表述性状态转移”&#xff0c;是由Roy Fielding博士在他的博士论文中提出的一种软件架构风格&#xff0c;特别适用于网络应用的设计。REST不是一个标准&#xff0c;而是一种设计原则和约束集…...

vue3-自定义指令来实现input框输入限制

文章目录 前言具体实现分析主要部分详细解析导入和类型定义mounted 钩子函数unmounted 钩子函数指令注册使用 总结 前言 使用vue中的自定义指令来实现input框输入限制 其中关键代码强制触发input &#xff0c;来避免&#xff0c;输入规则外的字符时&#xff0c;没触发vue的响…...

MySQL日志——redolog

redo log&#xff08;重做日志&#xff09; 为什么需要redo log&#xff1f; 在mysql提交一个事务后&#xff0c;这个事务所作的数据修改并不会直接保存到磁盘文件中&#xff0c;而是先保存在buffer pool缓冲区中&#xff0c;在需要读取数据时&#xff0c;先从缓冲区中找&…...

Python热涨落流体力学求解算法和英伟达人工智能核评估模型

&#x1f3af;要点 &#x1f3af;平流扩散简单离散微分算子 | &#x1f3af;相场模拟&#xff1a;简单旋节线分解、枝晶凝固的 | &#x1f3af;求解二维波动方程&#xff0c;离散化时间导数 &#x1f3af;英伟达 A100 人工智能核性能评估模型 | &#x1f3af;热涨落流体动力学…...

【C语言】数组参数和指针参数详解

在写代码的时候难免要把【数组】或者【指针】传给函数&#xff0c;那函数的参数该如何设计呢&#xff1f; 1 一维数组传参 #include <stdio.h> void test(int arr[])//ok? {} void test(int arr[10])//ok? {} void test(int* arr)//ok? {} void test2(int* arr[20])…...

Tuple 元组

文章目录 一、什么是元组 &#xff1f;二、元组的具体操作2.1 创建元组2.1.1 tuple() 创建元组函数和 list() 创建列表函数总结 2.2 元组的元素访问操作2.3 元组的元素计数操作2.4 zip 对象 一、什么是元组 &#xff1f; 列表属于可变序列,可以任意修改列表中的元素。 元组的…...

(资料收藏)王阳明传《知行合一》共74讲,王阳明知行合一音频讲解资料

今天给大家带来的不是软件&#xff0c;而是一份精神食粮——《知行合一》的教程福利。这可不是一般的教程&#xff0c;它关乎心灵&#xff0c;关乎智慧&#xff0c;关乎我们如何在纷繁复杂的世界中找到自己的位置。 咱们得聊聊王阳明&#xff0c;这位明代的大儒&#xff0c;他…...

空气质量预报模式系统WRF-CMAQ

空气污染问题日益受到各级政府以及社会公众的高度重视&#xff0c;从实时的数据监测公布到空气质量数值预报及预报产品的发布&#xff0c;我国在空气质量监测和预报方面取得了一定进展。随着计算机技术的高速发展、空气污染监测手段的提高和人们对大气物理化学过程认识的深入&a…...

Collections.sort()方法总结

Collections.sort()方法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨 Java 中的 Collections.sort() 方法。这个方法是 Java 集合框架中的…...

Java23种设计模式(二)

1、单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只有…...

Web前端收入来源:探索多元化的盈利渠道

Web前端收入来源&#xff1a;探索多元化的盈利渠道 在数字化时代&#xff0c;Web前端技术日益成为推动互联网业务发展的重要力量。对于前端开发者而言&#xff0c;除了传统的薪资收入外&#xff0c;还存在多种潜在的收入来源。本文将从四个方面、五个方面、六个方面和七个方面…...

抽象工厂模式(大话设计模式)C/C++版本

抽象工厂模式 C 参考&#xff1a;https://www.cnblogs.com/Galesaur-wcy/p/15927110.html #include <iostream> using namespace std;// 抽象产品Department ,定义具体产品的公共接口 class Department { public:virtual ~Department() default;virtual void Insert()…...

springboot宠物医院信息管理系统-计算机毕业设计源码04164

摘 要 现如今在中国&#xff0c;随着人民生活质量的逐渐提高&#xff0c;以及人民群众消费能力的日渐增长&#xff0c;各种各样的家养小动物&#xff0c;已经逐渐成为人类越来越亲密的生活伴侣。并且&#xff0c;现如今社会竞争及其激烈&#xff0c;人们的生活节奏越发急促、紧…...

Leetcode Hot100之哈希表

1. 两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现思路…...

Vision Transformer with Sparse Scan Prior

摘要 https://arxiv.org/pdf/2405.13335v1 In recent years, Transformers have achieved remarkable progress in computer vision tasks. However, their global modeling often comes with substantial computational overhead, in stark contrast to the human eye’s eff…...

学院网站建设申请报告/淘宝指数查询官网

1)实验平台&#xff1a;正点原子Linux开发板2)摘自《正点原子I.MX6U嵌入式Linux驱动开发指南》关注官方微信号公众号&#xff0c;获取更多资料&#xff1a;正点原子第十五章按键输入试验前面几章试验都是讲解如何使用I.MX6U的GPIO输出控制功能&#xff0c;I.MX6U的IO不仅能作为…...

德州建设信息网站/ue5培训机构哪家强

概述 集成算法 既可以做分类也可以做回归 目的是将前一阶段没做好的东西&#xff0c;用后面的树将他们弥补上&#xff0c;使得整体表达效果更好。后续构造的树是用来找回上棵树的残差。怎样构造后续的树来弥补前一棵树的残差&#xff0c;使得整体的表达效果好呢&#xff1f; 我…...

图书馆网站建设汇报/北京百度seo排名点击软件

第一次让自己感觉到正儿八经的聊业务的经历。之前与用户对于业务的交流&#xff0c;更多的感受是作为一个信息的接收者&#xff0c;用户如何说我便计划如何做。 而这次呢&#xff1f;思考与讨论业务中的逻辑、场景&#xff0c;而不是直接的拿来主义&#xff0c;对于业务原来之…...

wordpress特色图像/济南seo官网优化

【HNCE网上考试系统 v10.0】 本套软件使用权属于&#xff1a;全国大学生计算机等级考试(河南考区)--------------------------------------------------------------------------------本卷共有4道大题&#xff0c;共100分:一、单项选择题(每小题1分&#xff0c;共30分)1、编辑…...

常州北京网站建设/腾讯云域名注册官网

1热爱冲浪的你遇到过404吗作为一个每日网上冲浪的小可爱&#xff0c;你最崩溃的瞬间是什么&#xff1f;没错&#xff01;对于小V来讲&#xff0c;最可怕的事情不是没电而是4&#xff01;0&#xff01;4&#xff01;毕竟网络出了问题&#xff0c;小V就不能跟大家愉快的玩耍了说到…...

厦门网站建设多少钱/腾讯第三季度营收448亿元

帐篷的安装方法 1&#xff0e; 先从外袋将帐篷取出&#xff0c;注意里面有2个黑袋子,大的里面是帐篷杆,小的是地钉和防风绳,然后将帐篷平铺在地上&#xff0c;与帐篷裹在一起的钉袋、杆袋等配件先放一边。 2&#xff0e; 从杆袋中取出玻璃纤维杆&#xff0c;对接好&#xff0c…...