Breaking News
Loading...
Saturday, June 29, 2013

Thuật toán tìm phần tử "Hoàng hậu" trong ma trận

6/29/2013 10:43:00 PM

Một số gọi là Hoàng hậu khi và chỉ khi nó lớn nhất trên dòng,trên cột và 2 đường chéo đi qua nó


Lưu ý: Code này mình viết trên DEV C++ , dữ liệu đọc từ file "QUEEN.INP" và xuất ra file "QUEEN.OUT". Nếu bạn viết trên Visual studio thì bạn thay đổi lại thư viện và cách nhập xuất là Ok. Quan trọng là thuật toán xử lý thôi
Code:


#include <cstdlib>
#include <iostream>
#include <fstream>
#define fni "QUEEN.INP"
#define fno "QUEEN.OUT"
using namespace std;
int a[100][100],n,m;

bool maxduongcheo(int i, int j)
  {
      int k,h;
      for (k=i,h=j; k>=0 && h<m; k--, h++)
          if (a[k][h] > a[i][j]) 
              return false;
                
      for (k=i+1, h=j-1; k<n && h>=0; k++, h--)
          if (a[k][h] > a[i][j])
            return false;
            
      for (k=i-1, h =j-1; k>=0 && h>=0; k--,h--)
          if (a[k][h] > a[i][j])
              return false;
             
      for (k=i+1, h=j+1; k<n && h<m; k++, h++)
          if (a[k][h] > a[i][j])
              return false;
                 
      return true;
  }
  bool maxdongcot(int i, int j)
  {
      for (int k=0; k<n; k++ )
       if (a[k][j]>a[i][j])
                  
                   return false;
        
             
      for (int k=0; k<m; k++ )
        
      if (a[i][k]>a[i][j])
                 return false;
  return true;
  }
void doc()
{
    ifstream ifi(fni);
    ifi>>n;
    ifi>>m;
     for (int i=0;i<n;i++)
        for (int j=0;j<m;j++)
         ifi>>a[i][j];
    ifi.close();
   
}

void xuat()
{
     ofstream ofo(fno);
     int d=0;
      for (int i=0;i<n;i++)
        for (int j=0;j<m;j++)
        if(maxduongcheo(i,j) && maxdongcot(i,j))
            d++;
        ofo<<d;
     ofo.close();    
}


int main(int argc, char *argv[])
{
    doc();
    xuat();
 
    return EXIT_SUCCESS;
}



0 comments:

Post a Comment

 
Toggle Footer