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

· · 题解

思路:

首先看题,让我们求迷宫 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;
}