华为od机试100分题-精准核酸检测

方法不一定效率高,但一般比较好理解。

题目:

思路与解析:

1、用一个数组存储是否访问过,避免重复访问;

2、输入已经感染的人,将其存放到栈,将其视为访问过;

3、输入矩阵,用vector存储;

4、对栈中每个元素,遍历其对应行,看是否有未访问且传染的人,有的话count++(初始为0,统计传染人数);

5、输出count,即有多少人要做核酸检测。

#include <iostream>
#include<vector>
#include<stack>
using namespace std;

int main()
{
    int n;
    cin >> n;
    stack<int> s;
    vector<int> yn(n,0);
    vector<vector<int>> matrix(n,vector<int>(n));
    int num;
    while (cin >> num) {
		s.push(num);
        yn[num] =1;
        if (cin.peek() == '\n')
            break;
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)
            cin >> matrix[i][j];
    }
    int count = 0;
    while (!s.empty()) {
        int i = s.top();
        s.pop();
        for (int j = 0; j < n; j++) {
            if (yn[j] == 0 && matrix[i][j] == 1) {
                yn[j] = 1;
                s.push(j);
                count++;
            }
        }
    }
    cout << count << endl;
}

全部评论
强强强
1
送花
回复 分享
发布于 07-01 18:00 甘肃

相关推荐

2 1 评论
分享
牛客网
牛客企业服务