杨氏矩阵的增删改查

2023-11-25 03:08
文章标签 矩阵 改查 增删 杨氏

本文主要是介绍杨氏矩阵的增删改查,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

杨氏矩阵一左上角斜着往下看可以使小顶堆的树

 #include<iostream>
#define INFINITY 100000
using namespace std;
class CYoungTableau
{
private:
   int m_nRow;
   int m_nCol;
   int **m_pData;


public:


CYoungTableau(int row, int col);
~CYoungTableau();
void Init(int row, int col);
void Destory();
bool Insert(int x);
    bool Insert2(int x);
void Delete(int row, int col);
bool Find(int x, int&row, int&col) const;
void Print() const;
};


CYoungTableau::CYoungTableau(int row, int col)
{
   Init(row, col);
}


CYoungTableau::~CYoungTableau()
{
   Destroy();
}


/*****************插入方法1,一行插完再插另一行*********************/
bool CYoungTableau::Insert(int x)
{
  int row=m_nRow-1;
  int col=m_nCol-1;
  if(m_pData[row][col]<INFINITY)//杨氏矩阵已满,因为右下角不是无穷而是数
 return false;
  m_pData[row][col]=x;
  int r=row;
  int c=col;                     //从右下角往左上角找
  while((row>=0)|| (col>=0))
  {
     if((row>=1)&&(m_pData[row-1][col]>m_pData[r][c]))
{
   r=row-1;
c=col;
}
if((col>=1)&&(m_pData[row][col-1]>m_pData[r][c]))//不能用else。这里先和上边比,比完后再拿上边和左边比,左边大于上边和左边换,避免(17,19;20,'INFINITY ';)插入20;
{
   r=row;                                        //上左都大于该数,则选择与较大的换,若换较小的可能出错。
c=col-1;
}
if((r==row)&&(c==col))
break;
swap(m_pData[row][col],m_pData[r][c]);
row=r;
col=c;
  }
  return true;
}


/*****************插入方法2,优先插入逆对角线左上部插入*********************/
bool IsBig(int a, int b)
{
  if( rand()%2==0) //有%50的概率为>=,有%50的概率为>。
 return a>=b;
  return a>b;
}


bool CYoungTableau::Insert2(int x)
{
  int row=m_nRow-1;
  int col=m_nCol-1;
  if(m_pData[row][col]<INFINITY)
 return false;
  m_pData[row][col]=x;
  int r=row;
  int c=col;
  while((row>=0)||(col>=0))
  {
     if((row>=1)&&m_pData[row-1][col]>m_pData[r][c])
{
   r=row-1;
c=col;
}
if((col>=1) && IsBig(m_pData[row][col-1],m_pData[r][c])) 
{
  r=row;
  c=col-1;
}
if((r==row)&&(c==col))
break;
swap(m_pData[row][col],m_pData[r][c]);
row=r;
col=c;
  }
  return true;
}


bool CYoungTableau::Find(int x, int& row, int &col) const
{
   row=0;
   col=m_nCol-1;
   while((row<m_nRow) && (col>=0))
   {
      if(m_pData[row][col]==x)
 return true;
 if(x>m_pData[row][col])
 row++;
 else
 col--;
   }
   return false;
}


void CYoungTableau::Delete(int row, int col)
{
   int r=row;
   int c=col;
   while((row<m_nRow)&&(col<m_nCol))
   {
      if(m_pData[row][col]==INFINITY)
 break;
 if(row+1<m_nRow)
 {
    r=row+1;
c=col;
 }
 if((col+1<m_nCol) && (m_pData[row][col+1]<m_pData[r][c]))//删除数的下边和右边相比谁小,用谁替换
 {
    r=row;
c=col+1;
 }
 if((row==r)&&(col==c))
 break;
 m_pData[row][col]=m_pData[r][c];
 row=r;
 col=c;
   }
   m_pData[m_nRow-1][m_nCol-1]=INFINITY;
}

这篇关于杨氏矩阵的增删改查的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/423021

相关文章

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

08 增删查功能

划重点: lable 标签keyup:键盘事件标签内添加样式:style使用事件修饰符:preventforEach :遍历 数组indexOf: 可以返回要查询的某个字符串值在整个字符串中首次出现的位置下标findIndex:返回传入一个测试条件(函数)符合条件数组的首个元素的位置splice:向/从数组中添加/删除项目,然后返回被删除后的新的项目数组 黑椒蟹 一对: <!DOCTYPE

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x

【线性代数】正定矩阵,二次型函数

本文主要介绍正定矩阵,二次型函数,及其相关的解析证明过程和各个过程的可视化几何解释(深蓝色字体)。 非常喜欢清华大学张颢老师说过的一段话:如果你不能用可视化的方式看到事情的结果,那么你就很难对这个事情有认知,认知就是直觉,解析的东西可以让你理解,但未必能让你形成直觉,因为他太反直觉了。 正定矩阵 定义 给定一个大小为 n×n 的实对称矩阵 A ,若对于任意长度为 n 的非零向量 ,有 恒成

python科学计算:NumPy 线性代数与矩阵操作

1 NumPy 中的矩阵与数组 在 NumPy 中,矩阵实际上是一种特殊的二维数组,因此几乎所有数组的操作都可以应用到矩阵上。不过,矩阵运算与一般的数组运算存在一定的区别,尤其是在点积、乘法等操作中。 1.1 创建矩阵 矩阵可以通过 NumPy 的 array() 函数创建。矩阵的形状可以通过 shape 属性来访问。 import numpy as np# 创建一个 2x3 矩阵mat

JSP的增删改查part2

增加显示数据库表格cdsn的功能 1. 》》对CdsnDao接口和方法,CdsnService接口和方法进行处理,并增加CdsnServlet用于对新建展示页面进行处理 对cdsnDao接口和方法增加 》》接口 //获取cdsn用户数据列表 public List<cdsn> getCdsnList();》》CdsnDaoImpl增加内容//获得数据库所有数据publ

JSP的增删改查part1

运用Myeclisp对数据库进行增删改查 要建立6个库 1).其中dao层用与连接数据库和对数据库进行相关操作; 2).entity层用于存放数据库连接后的实体数据; 3.)service层是在mcv三层模式中新添加一层,能够更加清晰的定义应用程序的边界,需要操作数据的时候,通过service层访问DAO层来实现。

【UVA】10003-Cutting Sticks(动态规划、矩阵链乘)

一道动态规划题,不过似乎可以用回溯水过去,回溯的话效率很烂的。 13988658 10003 Cutting Sticks Accepted C++ 1.882 2014-08-04 09:26:49 AC代码: #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include