先介绍一下这个数据结构的定义,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++的更多相关文章

  1. poj2279排队——杨氏矩阵与钩子公式(DP爆内存)

    题目:http://poj.org/problem?id=2279 书上的DP做法会爆内存,尝试写了一个,过了样例. 转载: 代码如下: #include<iostream> #inclu ...

  2. 杨氏矩阵:查找x是否在矩阵中,第K大数

    参考:http://xudacheng06.blog.163.com/blog/static/4894143320127891610158/ 杨氏矩阵(Young Tableau)是一个很奇妙的数据结 ...

  3. 杨氏矩阵查找元素位置Java实现

    杨氏矩阵是一个二维矩阵,特点是每一行的右边的元素比左边的大,每一列下面的元素比上面的大: 比如 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 假设要查找的变量为target ...

  4. 【C语言】二维数组中的查找,杨氏矩阵

    //二维数组中的查找,杨氏矩阵 //在一个二维数组中,每行都依照从左到右的递增的顺序排序.每列都依照从上到下递增的顺序排序. //请完毕一个函数.输入这种一个数组和一个数,推断数组中是否包括这个数. ...

  5. 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

    // 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #i ...

  6. 杨氏矩阵C++实现

    何为杨氏矩阵?这个网上的介绍很多,下面给出杨氏矩阵搜索算法: #include <iostream> using namespace std; // 杨氏矩阵查找算法 ], int N, ...

  7. c语言杨氏矩阵算法

    杨氏矩阵 有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在.时间复杂度小于O(N);数组:1 2 32 3 43 4 5 1 3 42 4 54 5 ...

  8. 【杨氏矩阵+勾长公式】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 ...

  9. hihocoder第238周:杨氏矩阵的个数

    题目链接 问题描述 给定一个N行M列的矩阵,往里面填入$1-N\times M$个数字,使得这个矩阵每行.每列都满足递增.问:有多少种填法? 问题分析 这个问题很难,如果能够直接想到,那就是天才了. ...

随机推荐

  1. html5第二天

    哎..以为自己能每天坚持写呢.前面8天一直在D3的东西..都没有时间研究html5.草草的翻了一下HTML5和CSS3权威指南.对整个页面设计有了一个大概的把握,但是让自己做肯定还会有写问题.暂时ht ...

  2. IE的F12开发人员工具不显示

    IE的F12开发人员工具不显示问题: 按下F12之后,开发人员工具在桌面上看不到,但是任务栏里有显示.将鼠标放在任务栏的开发人员工具上,出现一片透明的区域,选中之后却出不来.将鼠标移动到开发人员工具的 ...

  3. UVA - 11235 Frequent values

    2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...

  4. maven向本地仓库导入jar包(处理官网没有的jar包)

    对于官网没有的jar包,maven向本地仓库导入jar包用如下命令 mvn install:install-file -DgroupId=包名 -DartifactId=项目名 -Dversion=版 ...

  5. 【HEOI2012】采花 BZOJ2743

    Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一 ...

  6. struts2使用配置文件中使用json-default的问题

    使用Struts2实现异步验证数据: 与Struts2相关的jar包如下: freemarker-2.3.13.jar ognl-2.6.11.jar struts2-core-2.1.6.jar s ...

  7. ubuntu 好玩多了

    从一开始的咒骂,到慢慢的喜欢,ubuntu比CentOs可玩多了.

  8. asp.net4.5尚未在web服务器上注册 解决方案

    以前都是直接用aspnet_regiis.exe -i 现在用这个不好使了,解决办法打微软补丁. https://blogs.msdn.microsoft.com/webdev/2014/11/11/ ...

  9. java 保留字符串数字的位数,不够前面补0

    @Test public void test() { this.printToConsole(autoGenericCode("10011")); this.printToCons ...

  10. 设计模式--享元模式Flyweight(结构型)

    一.享元模式 在一个系统中如果有多个相同的对象,这些对象有部分状态是可以共享的,我们运用共享技术就能有效地支持大量细粒度的对象. 二.例子 举个围棋的例子,围棋的棋盘共有361格,即可放361个棋子. ...