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

Thuật toán tìm phần tử "Yên Ngựa" trong ma trận

6/29/2013 10:53:00 PM

Một phần tử được gọi là Yên Ngựa khi và chỉ khi nó lớn nhất trên dòng và nhỏ nhất trên cột hoặc lớn nhất trên cột và nhỏ nhất trên dòng

Lưu ý: Code này mình viết trên DEV C++ , dữ liệu đọc từ file "SADDLE.INP" và xuất ra file "SADDLE.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 "SADDLE.INP"
#define fno "SADDLE.OUT"
using namespace std;
int a[100][100],b[100][2],c[2][100] ,n,m,d=0,vmax,vmin;
void doc()
    ifstream ifi(fni);
    ifi>>n;
    ifi>>m;
   
   
     for (int i=0;i<n;i++)
    {       vmax=vmin=0;
        for (int j=0;j<m;j++)
        {
         ifi>>a[i][j];
         if(a[i][j]>a[i][vmax])
         vmax=j;
         if(a[i][j]<a[i][vmin])
         vmin=j;
         }
         b[i][0]=a[i][vmin];
         b[i][1]=a[i][vmax];
    }
   
     ifi.close();
   
}

void maxmincot()
{
 
   for (int j=0;j<m;j++)
    {       vmax=vmin=0;
        for (int i=0;i<n;i++)
        {
        
         if(a[i][j]>a[vmax][j])
         vmax=i;
         if(a[i][j]<a[vmin][j])
         vmin=i;
         }
         c[0][j]=a[vmin][j];
         c[1][j]=a[vmax][j];
    }
   
}
void xuat()
{
     maxmincot();
     ofstream ofo(fno);   
    
      for(int i=0;i<n;i++)
      for(int j=0;j<m;j++)
     if((a[i][j]==b[i][0] && b[i][0]==c[1][j]) || (a[i][j]==b[i][1] && b[i][1]==c[0][j]))
      d++;
          ofo<<d;
          ofo.close();    
}


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


0 comments:

Post a Comment

 
Toggle Footer