杨氏矩阵定义及其查找的实现C++
先介绍一下这个数据结构的定义,Young Tableau有一个m*n的矩阵,然后有一数组 a[k], 其中 k<=m*n ,然后把a[k]中的数填入 m*n 的矩阵中,填充规则为:
1. 每一行每一列都严格单调递增(有其他的版本是递减,其原理相同)。
2. 如果将a[k]中的数填完后,矩阵中仍有空间,则填入 ∞。
举例:

这里主要给出杨氏矩阵的定义和查找
方法:理由每一列,没一行都是递增的,我们从左上角开始查找,不断的缩小矩阵的大小,最后只剩一1*1的矩阵。

C++代码:
#pragma once
//YoungTableau.h
#include <iostream>
class YoungTableau
{
public:
YoungTableau(int rows, int columns,int**newTable)
{
x = rows; //行数
y = columns; //列数 if (newTable!=NULL)
{
table = (int **)((new int[rows*columns]));
for (int i = ; i < rows*columns; i++) {
((int*)table)[i] = ((int*)newTable)[i];
std::cout << ((int*)table)[i] << std::endl;
} } };
~YoungTableau();
private:int x;
private:int y;
private: int **table; public:
void print_matrix(void)
{
std::cout <<x<<y << std::endl;
if (table != NULL)
{
for (int i = ; i < x; i++)
for (int j = ; j < y; j++)
std::cout << ((int*)table)[i*y+j]<<std:: endl;
}
}
public:int get_element(int rows, int columns,int*res)
{
if (res != NULL)
{
if (rows>=this->x || columns >= this->y)
{
*res = ;
return -;
}
else
{
*res = ((int*)table)[rows*y + columns];
return ;
}
}
else
{
*res = ;
return -;
}
}
private:bool IsEqualAtLeftTop(int data, int rownum, int columnnum)
{
if (this->table != NULL)
{
if (rownum >= x || columnnum >= y || (rownum == x - && columnnum == && data != ((int*)this->table)[rownum*y + columnnum]))
{
std::cout << "illgal column" << std::endl;
return false;
}
else if (data == ((int*)this->table)[rownum*y + columnnum])
{
return true;
}
else if (data < ((int*)this->table)[rownum*y + columnnum])
{
std::cout << "next column"<< std::endl;
if (columnnum == )
return false;
else
return IsEqualAtLeftTop(data, rownum, columnnum - );
}
else
{
std::cout << "next row" << std::endl;
if (rownum == x-)
return false;
else
return IsEqualAtLeftTop(data, rownum+, columnnum);
} }
else
{
return false;
}
}
public:bool IsExistence(int data)
{
if (this->table != NULL)
{
/*for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
{
if (data == ((int*)table)[i*y + j])
return true;
}
return false;*/
return IsEqualAtLeftTop(data, , y - );
}
return false;
} };
// Young_Tableau.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "YoungTableau.h" int _tmain(int argc, _TCHAR* argv[])
{
int tmp_table[][] =
{
{, , },
{, , },
{, , }
};
YoungTableau matrix(,,(int**)tmp_table);
matrix.print_matrix();
int tmp = ;
matrix.get_element(,,&tmp);
std::cout << tmp << std::endl; if (matrix.IsExistence()==true)
std::cout <<"true"<< std::endl;
else std::cout << "false" << std::endl;
while ();
return ;
}
#include "stdafx.h"
#include "YoungTableau.h"
// YoungTableau.cpp : 类的实现
// YoungTableau::~YoungTableau()
{ }
杨氏矩阵定义及其查找的实现C++的更多相关文章
- poj2279排队——杨氏矩阵与钩子公式(DP爆内存)
题目:http://poj.org/problem?id=2279 书上的DP做法会爆内存,尝试写了一个,过了样例. 转载: 代码如下: #include<iostream> #inclu ...
- 杨氏矩阵:查找x是否在矩阵中,第K大数
参考:http://xudacheng06.blog.163.com/blog/static/4894143320127891610158/ 杨氏矩阵(Young Tableau)是一个很奇妙的数据结 ...
- 杨氏矩阵查找元素位置Java实现
杨氏矩阵是一个二维矩阵,特点是每一行的右边的元素比左边的大,每一列下面的元素比上面的大: 比如 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 假设要查找的变量为target ...
- 【C语言】二维数组中的查找,杨氏矩阵
//二维数组中的查找,杨氏矩阵 //在一个二维数组中,每行都依照从左到右的递增的顺序排序.每列都依照从上到下递增的顺序排序. //请完毕一个函数.输入这种一个数组和一个数,推断数组中是否包括这个数. ...
- 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数
// 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #i ...
- 杨氏矩阵C++实现
何为杨氏矩阵?这个网上的介绍很多,下面给出杨氏矩阵搜索算法: #include <iostream> using namespace std; // 杨氏矩阵查找算法 ], int N, ...
- c语言杨氏矩阵算法
杨氏矩阵 有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在.时间复杂度小于O(N);数组:1 2 32 3 43 4 5 1 3 42 4 54 5 ...
- 【杨氏矩阵+勾长公式】POJ 2279 Mr. Young's Picture Permutations
Description Mr. Young wishes to take a picture of his class. The students will stand in rows with ea ...
- hihocoder第238周:杨氏矩阵的个数
题目链接 问题描述 给定一个N行M列的矩阵,往里面填入$1-N\times M$个数字,使得这个矩阵每行.每列都满足递增.问:有多少种填法? 问题分析 这个问题很难,如果能够直接想到,那就是天才了. ...
随机推荐
- php编译 :virtual memory exhausted: Cannot allocate memory
有时候用vps建站时需要通过编译的方式来安装主机控制面板.对于大内存的VPS来说一般问题不大,但是对于小内存,比如512MB内存的VPS来说,很有可能会出现问题,因为编译过程是一个内存消耗较大的动作. ...
- PYTHON map()函数详解
map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 栗子如下↓ 图片来自于网上 def f(x,a): return x+x ...
- gulp自动刷新和css、js压缩
之前搭建过Grunt,但是用起来有点繁琐,后来有人跟我说gulp更多简单.所以今天又搭建一个gulp.在使用gulp前应该有nodeJs环境,安装完nodejs后,就可以开始gulp的搭建了. 先新建 ...
- pg gem 安装(postgresql94)
使用下面命令安装报错 gem install pg 错误: [root@AS-test middle_database]# gem install pgBuilding native extensio ...
- Selenium Xpath Tutorials - Identifying xpath for element with examples to use in selenium
Xpath in selenium is close to must required. XPath is element locator and you need to provide xpath ...
- 55. 2种方法求字符串的组合[string combination]
[本文链接] http://www.cnblogs.com/hellogiser/p/string-combination.html [题目] 题目:输入一个字符串,输出该字符串中字符的所有组合.举个 ...
- Home 安转beta版软件
今天想装测试版的cocoapods,用 brew install cocoapods 后,总是安装稳定版,就是1.1.0,不是最新的beta版,发现用下面这个命令可以装最新beta版 brew ins ...
- 如何将 Windows Server 2012 r2 打造成 Windows 8.1?
Server 系列相对于桌面系统Windows 8.1 .嵌入式系统Embedded 8.1来说,还是有所不同的,有其独特性,所以,标题写着“打造”充其量不过是不断接近的意思.还有很多地方存在进一步深 ...
- 通过rsync+inotify实现数据的实时备份
我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp.tar备份方式相比,r ...
- MVC 导出Excel 的其中一方法(View导出excel)
场景:mvc下导出excel 思路:使用View导出excel 步骤: 1.导出标签添加事件 $("#export_A").click(function(){ //省略代码.... ...