CODE C++: kho an toàn Nhà máy sản xuất vũ khí có nhiều kho hàng và các kho hàng có lính canh gác. Các kho hàng và lính canh được thể hiện trên ma trận m dòng, N cột. Kho hàng được gọi là kho an toàn nếu xung quanh các kho đó có 8 lính canh. Hãy lập trình đưa ra vị trí các kho an toàn. Dữ liệu vào: - Dòng 1 là 2 số nguyên m, n (0<m,n<=100) - M dòng tiếp theo mỗi dòng có n số 0 hoặc 1 thể hiện kho hàng và lính canh (kho hàng kí hiệu : 0 ; lính canh kí hiệu :1 - Các số trên cùng một dòng ghi cách nhau một dấu cách. Kết quả : - Nếu có kho an toàn thì ghi vị trí của các kho đó (chỉ số dòng và cột) - Nếu không có kho an toàn thì ghi -1 - Các số trên cùng một dòng ghi cách nhau một dấu cách. 4 5 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 0 0 1 1 1
2 câu trả lời
#include <iostream>
using namespace std;
const int maxn = 102;
int n,m;
bool a[maxn][maxn];
bool flag = 0;
bool check(int p,int k) {
for (int i = p-1;i <= p+1;i++)
for (int j = k-1;j <= k+1;j++) {
if (i == p && j == k) continue;
if (a[i][j] != 1)
return false;
}
return 1;
}
int main() {
cin >> n >> m;
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
cin >> a[i][j];
for (int i = 2;i < n;i++)
for (int j = 2;j < m;j++) {
if (a[i][j] == 1) continue;
if (check(i,j)) {
cout << i << ' ' << j << '\n';
flag = 1;
}
}
if (!flag)
return cout << -1, 0;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,dem=0;
cin>>n>>m;
int a[105][105]={0};
for (int i=1;i<=n;i++)
{
for (int y=1;y<=m;y++)
cin>>a[i][y];
}
for (int i=1;i<=n;i++)
{
for (int y=1;y<=m;y++)
if(a[i][y]==0)
{
if (a[i-1][y]==1&&a[i-1][y-1]==1&&a[i-1][y+1]==1&&a[i][y+1]==1&&a[i][y-1]==1&&a[i+1][y]==1&&a[i+1][y-1]==1&&a[i+1][y+1]==1)
cout<<i<<" "<<y<<" ",dem++;
}
}
if (dem==0) cout<<-1;
}