跳过正文
题解:P10265 [GESP样题 七级] 迷宫统计

题解:P10265 [GESP样题 七级] 迷宫统计

xyx404
作者
xyx404
Have a nice day.

封面

思路:
#

首先看题,让我们求迷宫 $m$ 可以直接到达其他的迷宫有多少个,有多少迷宫可以直接到达 $m$ 号迷宫,和这些迷宫的总和

先看迷宫 $m$ 可以直接到达其他的迷宫,是什么意思呢?

其实就是让我们看当历遍的迷宫是 $m$ 时有多少个为真。

由此得出代码:

	for(int i=1;i<=n;i++){
		if(jz[m][i]==1){ // 我们只用查看 m 迷宫有多少个 1
			sum1++;
		}
	} 

然后我们看多少迷宫可以直接到达 $m$ 号迷宫,这又是什么意思呢?

其实就是查看有多少个迷宫的 $m$ 也就是 $jz[i][m]$ 为真。

由此得出代码:

	for(int i=1;i<=n;i++){
		if(jz[i][m]==1)sumzj++;
	} 

让我们看一下这两份代码循环的条件是不是相同的?

是对吧,由此合并两份代码:

	for(int i=1;i<=n;i++){
		if(jz[m][i]==1){
			sum1++;
		}
		if(jz[i][m]==1)sumzj++;
	} 

最后看这些迷宫的总和,没有坑直接输出就行。

完整代码
#

#include<bits/stdc++.h>
using namespace std;
bool jz[1001][1001];
long long sumzj;
long long sum1;
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>jz[i][j];
		}
	} 
	for(int i=1;i<=n;i++){
		if(jz[m][i]==1){
			sum1++;
		}
		if(jz[i][m]==1)sumzj++;
	} 
	cout<<sum1<<" "<<sumzj<<" "<<sum1+sumzj;
	
	return 0;
}