程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 楊氏矩陣定義及其查找的實現C++,楊氏矩陣定義

楊氏矩陣定義及其查找的實現C++,楊氏矩陣定義

編輯:C++入門知識

楊氏矩陣定義及其查找的實現C++,楊氏矩陣定義


  先介紹一下這個數據結構的定義,Young Tableau有一個m*n的矩陣,然後有一數組 a[k], 其中 k<=m*n ,然後把a[k]中的數填入 m*n 的矩陣中,填充規則為:

1.  每一行每一列都嚴格單調遞增(有其他的版本是遞減,其原理相同)。

2.  如果將a[k]中的數填完後,矩陣中仍有空間,則填入 

  舉例:

1 #pragma once 2 //YoungTableau.h 3 #include <iostream> 4 class YoungTableau 5 { 6 public: 7 YoungTableau(int rows, int columns,int**newTable) 8 { 9 x = rows; //行數 10 y = columns; //列數 11 12 if (newTable!=NULL) 13 { 14 table = (int **)((new int[rows*columns])); 15 for (int i = 0; i < rows*columns; i++) 16 17 { 18 ((int*)table)[i] = ((int*)newTable)[i]; 19 std::cout << ((int*)table)[i] << std::endl; 20 } 21 22 } 23 24 }; 25 ~YoungTableau(); 26 private:int x; 27 private:int y; 28 private: int **table; 29 30 public: 31 void print_matrix(void) 32 { 33 std::cout <<x<<y << std::endl; 34 if (table != NULL) 35 { 36 for (int i = 0; i < x; i++) 37 for (int j = 0; j < y; j++) 38 std::cout << ((int*)table)[i*y+j]<<std:: endl; 39 } 40 } 41 public:int get_element(int rows, int columns,int*res) 42 { 43 if (res != NULL) 44 { 45 if (rows>=this->x || columns >= this->y) 46 { 47 *res = 0; 48 return -1; 49 } 50 else 51 { 52 *res = ((int*)table)[rows*y + columns]; 53 return 0; 54 } 55 } 56 else 57 { 58 *res = 0; 59 return -2; 60 } 61 } 62 private:bool IsEqualAtLeftTop(int data, int rownum, int columnnum) 63 { 64 if (this->table != NULL) 65 { 66 if (rownum >= x || columnnum >= y || (rownum == x - 1 && columnnum == 0 && data != ((int*)this->table)[rownum*y + columnnum])) 67 { 68 std::cout << "illgal column" << std::endl; 69 return false; 70 } 71 else if (data == ((int*)this->table)[rownum*y + columnnum]) 72 { 73 return true; 74 } 75 else if (data < ((int*)this->table)[rownum*y + columnnum]) 76 { 77 std::cout << "next column"<< std::endl; 78 if (columnnum == 0) 79 return false; 80 else 81 return IsEqualAtLeftTop(data, rownum, columnnum - 1); 82 } 83 else 84 { 85 std::cout << "next row" << std::endl; 86 if (rownum == x-1) 87 return false; 88 else 89 return IsEqualAtLeftTop(data, rownum+1, columnnum); 90 } 91 92 } 93 else 94 { 95 return false; 96 } 97 } 98 public:bool IsExistence(int data) 99 { 100 if (this->table != NULL) 101 { 102 /*for (int i = 0; i < x; i++) 103 for (int j = 0; j < y; j++) 104 { 105 if (data == ((int*)table)[i*y + j]) 106 return true; 107 } 108 return false;*/ 109 return IsEqualAtLeftTop(data, 0, y - 1); 110 } 111 return false; 112 } 113 114 };

 1 // Young_Tableau.cpp : 定義控制台應用程序的入口點。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include "YoungTableau.h"
 6 
 7 int _tmain(int argc, _TCHAR* argv[])
 8 {
 9     int tmp_table[3][3] = 
10     {
11         {1, 3, 4 },
12         {2, 3, 6},
13         {5, 8, 10}
14     };
15     YoungTableau matrix(3,3,(int**)tmp_table);
16     matrix.print_matrix();
17     int tmp = 0;
18     matrix.get_element(2,2,&tmp);
19     std::cout << tmp << std::endl;
20 
21     if (matrix.IsExistence(5)==true)
22         std::cout <<"true"<< std::endl;
23     else std::cout << "false" << std::endl;
24     while (1);
25     return 0;
26 }

 

 1 #include "stdafx.h"
 2 #include "YoungTableau.h"
 3 // YoungTableau.cpp : 類的實現
 4 //
 5 
 6 
 7 YoungTableau::~YoungTableau()
 8 {
 9 
10 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved