杨氏矩阵定义及其查找的实现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$个数字,使得这个矩阵每行.每列都满足递增.问:有多少种填法? 问题分析 这个问题很难,如果能够直接想到,那就是天才了. ...
随机推荐
- JS数组求最大值和最小值
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Hadoop基础思维导图
- git error: unable to rewind rpc post data - try increasing http.postBuffer
error: unable to rewind rpc post data - try increasing http.postBuffererror: RPC failed; curl 56 Rec ...
- setprecision **fixed
#include <iostream> #include <iomanip> using namespace std; int main( void ) { const dou ...
- 二刷Cracking the Coding Interview(CC150第五版)
第18章---高度难题 1,-------另类加法.实现加法. 另类加法 参与人数:327时间限制:3秒空间限制:32768K 算法知识视频讲解 题目描述 请编写一个函数,将两个数字相加.不得使用+或 ...
- excel多组数据散点图生成
在研究数据分布时,散点图是一类比较常用的方法,通过三点图可以很好的显示数据的分布位置.一组数据生成散点图,利用excel是很容易生成的:但是,多组数据生成散点图,不同组数据用不同颜色表示,那该怎么生成 ...
- 51. 顺时针打印矩阵[print matrix in clockwise direction]
[本文链接] http://www.cnblogs.com/hellogiser/p/print-matrix-in-clockwise-direction.html [题目] 输入一个矩阵,按照从外 ...
- phpstudy 80端口被占用,修改端口
搭建mantis,总会出现80端口被占用的情况.看到别的步骤是:1.cmd 运行netstat -ano查看80端口被什么占用,然后在任务管理器找到对应的结束进程.通常情况下是被System占用,右击 ...
- UiAutomator--UiAutomatorHelper快速调试
UiAutomatorHelper使用 1.介绍:他是一种可以快速调试的方法:其本身也是java问津相当于自动化脚本,查看该文件,其主要实现的功能如下 1.创建build:android cre ...
- links and softwares
links 普通 http://www.ncpa-classic.com//special/2014gejujie/index.shtml ; 中国大剧院 http://tieba.baidu.com ...