NxN棋盘问题00:对角线特性

NxN棋盘有如下特性:

**1. 对角线的数学特性**

(1) 主对角线(左上->右下):

同一主对角线上的所有格子满足 `行号 - 列号 = 常数`。 也就是说同一主对角线上所有节点的 `行号 - 列号`相等。

同一主对角线上的格子满足 `列号 - 行号 = 常数`。 也就是说同一主对角线上所有节点的 `列号 - 行号`相等。

(2) 副对角线(右上->左下):

同一副对角线上的所有格子满足 `行号 + 列号 = 常数`。 也就是说同一副对角线上所有节点`行号 + 列号`相等。

实例代码:

通过主副对角线的特性作为判断条件,打印出输入的棋盘的某个点的主副对角线。

cpp 复制代码
#include <iostream>
#include <vector>

using namespace std;

// 打印一个n x n 的棋盘
void ChessBoardPrint(int n)
{
    cout << endl;
    for (int row = 0; row < n; ++row) {
        for (int col = 0; col < n; ++col) {
            cout << "*" << " ";
        }
        cout << endl;
    }
    cout << endl;
}

// 打印输入点的主副对角线
void DiagPrint1(int n, int row, int col)
{
    cout << endl;
    cout << endl << "method 1 : " << endl;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            if (i - j == row - col) {
                // 主对角线特性是这条线上的所有节点(行号 - 列号)相等
                // 打印主对角线"\"是需要使用"\\ "
                // cout << "\\ " << " " ;
                cout << "*" << " " ;
            } else if (i + j == row + col) {
                // 副对角线特性是这条线上的所有节点(行号 + 列号)相等
                cout << "*" << " ";
            } else {
                cout << "-" << " ";
            }
        }
        cout << endl;
    }
    cout << endl;
}

void DiagPrint2(int n, int row, int col)
{
    cout << endl << "method 2 : " << endl;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            if (j - i == col - row) {
                cout << "*" << " ";
            } else if (i + j == row + col) {
                cout << "*" << " ";
            } else {
                cout << "-" << " ";
            }
        }
        cout << endl;
    }
    cout << endl;
}

int main()
{
    int n = 0;
    cout << "输入一个棋盘的大小(n x n) : ";
    cin >> n;
    ChessBoardPrint(n);
    int row = 0, col = 0;
    cout << "输入需要查看对角线的某个点(row, col)  :  ";
    while (cin >> row >> col) {
        DiagPrint1(n, row, col);
        DiagPrint2(n, row, col);
        cout << "输入需要查看对角线的某个点(row, col) :";
    }

    return 0;
}

测试一下:输入棋盘大小,然后输入需要查看的某个点的对角线,主副对角线就根据对角线特性打印出来了。

相关推荐
叠层归一研究院44 分钟前
基于极限自指的叠层归一宇宙结构理论——无元外部封闭系统的内生区分模型
人工智能·经验分享·算法·agi
Selvaggia2 小时前
Diffusion Model 的基本原理与模型架构
算法
汉克老师3 小时前
CSP-J 2026 初赛试题解析(第一部分:选择题(8-15))精讲
c++·csp-j·小学生·学c++编程
wabs6663 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
hanlin033 小时前
刷题笔记:力扣第41题-缺失的第一个正数
笔记·算法·leetcode
shehuiyuelaiyuehao4 小时前
算法50,分治归并,数组中的逆序对
java·算法
风合星语4 小时前
2026 ROS 2 Lyrical C++ 入门(五):Action 实战——任务反馈、取消与超时处理
c++·机器人·ros2·异步编程·lyrical
阳明山水4 小时前
校准分位数驱动智能库存决策
人工智能·深度学习·算法·机器学习·架构
91刘仁德5 小时前
C++ 继承和多态 设计模式
c语言·c++·笔记
库玛西5 小时前
哈夫曼树与前缀编码:数据压缩的贪心核心
c语言·c++·笔记·考研