先介绍一下这个数据结构的定义,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. Codeforces 731C Socks 并查集

    题目:http://codeforces.com/contest/731/problem/C 思路:并查集处理出哪几堆袜子是同一颜色的,对于每堆袜子求出出现最多颜色的次数,用这堆袜子的数目减去该值即为 ...

  2. 无中间变量交换swap(a,b)

    #include <stdio.h> /* 加减法 整型.浮点型(损失精度) */ void swap1(int *a,int *b) { *a=*a+*b; *b=*a-*b; *a=* ...

  3. HTTP事务

    一次完整的HTTP事务 当我们在地址栏输入URL,按下回车的时候,浏览器需要做的事情: 1.域名解析:浏览器解析域名对应的IP地址: //DNS Domain Name System 域名系统  将域 ...

  4. kali python pip3 的安装和卸载

    今天很高兴安装完成调整了kali 然后看见kali已经帮助我安装了python2.7和python3.5可把我开心坏了,可是2.7有pip,而且包很全,但2.7与3.0切换使用我的就尴尬了 最后在su ...

  5. maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

    maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository. ...

  6. 前端模拟 图片上传---->>通过选取的图片获取其路径<<------

    <head> <meta charset="UTF-8"> <title>Title</title> <style> d ...

  7. LeetCode 209 Minimum Size Subarray Sum

    Problem: Given an array of n positive integers and a positive integer s, find the minimal length of ...

  8. java 多态和内部类

    接口跟接口之间存在继承关系 一个接口可以继承多个接口 一个非抽象类:必须实现接口中的所有方法 一个抽象类实现接口  可以不实现接口中的方法  但是继承与抽象类的类必须要是实现接口中的方法 多态:一个对 ...

  9. WIN7凭据管理器保存的凭据过段时间会自动删除的解决办法

    控制面板\用户帐户和家庭安全\凭据管理器 进入该页面可看到所有凭据

  10. 【.net+jquery】绘制自定义表单(含源码)

    前言 两年前在力控的时候就想做一个类似的功能,当时思路大家都讨论好了,诸多原因最终还是夭折了.没想到两年多后再这有重新提出要写一个绘制表单的功能.对此也是有点小激动呢?总共用时8.5天的时间基本功能也 ...