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