作业帮第三题AC

作业帮第三题,渣渣回报牛客一波,凭记忆写出来的,不知道是不是有错的地方,不过大概思想是这样
#include<iostream>
#include<string>
#include<vector>

using namespace std;
int n;
int m;

void dfs(const vector<string>& matrix,vector<vector<bool>> &fg,
         int i,int j,int &cur,int& ret) {
    cur++;
    if(cur > ret) ret = cur;
    fg[i][j] = true;
    if(i-1 >= 0 && fg[i-1][j] == false && matrix[i-1][j] == '1') 
        dfs(matrix,fg,i-1,j,cur,ret);
    if(i+1 < n && fg[i+1][j] == false && matrix[i+1][j] == '1')
        dfs(matrix,fg,i+1,j,cur,ret);
    if(j-2 >= 0 && fg[i][j-2] == false && matrix[i][j-2] == '1')
        dfs(matrix,fg,i,j-2,cur,ret);
    if(j+2 < m && fg[i][j+2] == false && matrix[i][j+2] == '1')
        dfs(matrix,fg,i,j+2,cur,ret);
    return;
}

int main() {
    vector<string> matrix;
    string str;
    while(cin >> str) {
        matrix.push_back(str);
    }
    n = matrix.size();
    if(n == 0) {
        cout << 0 << endl;
        return 0;
    }
    m = matrix[0].size();
    vector<vector<bool>> flag(n,vector<bool>(m,false));
    int ret = 0;
    int cur = 0;
    for(int i = 0;i < n;i++) {
        for(int j = 0;j < m;j++) {
            if(matrix[i][j] == '1' && flag[i][j] == false)  {
                dfs(matrix,flag,i,j,cur,ret);
                cur = 0;
            }
        }
    }
    
    cout << ret << endl;
    return 0;
}






#作业帮##笔试题目#
全部评论
求最大连通度那题吗,我用的宽度优先,先找一个等于1且没被访问过的点,加入一个队列里面,如果邻域也有符合规则的,也加到队列里面,循环直到队列为空,然后存下最大联通度就可以了
点赞 回复
分享
发布于 2019-09-05 23:56
题目能给一下吗?
点赞 回复
分享
发布于 2019-09-05 23:57
联易融
校招火热招聘中
官网直投
我也60%啊,蓝瘦,不知道哪里有问题
点赞 回复
分享
发布于 2019-09-06 00:11

相关推荐

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