【HihoCoder - 1662】查找三阶幻方 (九宫)(暴力)

本文介绍了一种算法,用于计算给定矩阵中能构成三阶幻方的3x3子矩阵数量。通过遍历矩阵并检查每个可能的3x3子矩阵是否满足幻方条件来实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题干:

给定一个N x M的矩阵,请你数一数其中有多少个3 x 3的子矩阵可以构成三阶幻方?  

如果3 x 3的矩阵中每一行、每一列和两条对角线上的3个数之和都相等,我们就认为其构成一个三阶幻方。

Input

第一行包含两个整数N和M。(1 ≤ N, M ≤ 100)  

以下N行M列包含一个N x M的矩阵A。(1 ≤ Aij ≤ 100)

Output

输出矩阵中包含多少个三阶幻方。

Sample Input

5 5  
4 9 2 1 8  
3 5 7 6 2  
8 1 6 9 3  
2 3 3 6 9
5 6 9 3 6

Sample Output

2 

解题报告:

    直接暴力就好了啊。

AC代码:

#include<bits/stdc++.h>

using namespace std;
int maze[105][105];
bool fit(int x,int y) {
	int a[10];
	a[1]=maze[x][y]+maze[x+1][y]+maze[x+2][y];a[2]=maze[x][y+1]+maze[x+1][y+1]+maze[x+2][y+1];a[3]=maze[x][y+2]+maze[x+1][y+2]+maze[x+2][y+2];
	a[4]=maze[x][y]+maze[x][y+1]+maze[x][y+2];a[5]=maze[x+1][y]+maze[x+1][y+1]+maze[x+1][y+2];a[6]=maze[x+2][y]+maze[x+2][y+1]+maze[x+2][y+2];
	a[7]=maze[x][y]+maze[x+1][y+1]+maze[x+2][y+2];a[8]=maze[x][y+2]+maze[x+1][y+1]+maze[x+2][y];
	for(int i = 1; i<=8; i++) {
		if(a[i] != a[1]) return 0;
	}
	return 1;
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i = 1; i<=n; i++) {
		for(int j = 1; j<=m; j++) {
			scanf("%1d",&maze[i][j]);
		}
	}
	if(n < 3 || m < 3 ) {
		printf("0\n");return 0 ;
	}
	int ans = 0;
	for(int i = 1; i<=n-2; i++) {
		for(int j = 1; j<=m-2; j++) {
			if(fit(i,j)) ans++;
		}
	}
	printf("%d\n",ans);
	return 0 ;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值