全部评论
#include <iostream>
#include <vector>
using namespace std;
const int direction[4][2] = {
{-1,0}, // 上
{1,0}, // 下
{0,1}, // 右
{0,-1} // 左
};
void helper(vector<vector<int>>& matrix, int x, int y, vector<vector<bool>>& visited)
{
int M = matrix.size();
for(int i=0;i<4;i++)
{
int tmp_x = x + direction[i][0];
int tmp_y = y + direction[i][1];
if(tmp_x<0 || tmp_y<0 || tmp_x>=M || tmp_y>=M)
{
continue;
}
if(matrix[tmp_x][tmp_y]==1 && !visited[tmp_x][tmp_y])
{
visited[tmp_x][tmp_y] = true;
helper(matrix, tmp_x, tmp_y, visited);
}
}
}
int main(int argc, char* argv[])
{
int M = 0;
while(cin>>M)
{
vector<vector<int>> matrix(M, vector<int>(M));
for(int i=0;i<M;i++)
{
for(int j=0;j<M;j++)
{
cin >> matrix[i][j];
}
}
int num = 0;
vector<vector<bool>> visited(M, vector<bool>(M, false));
for(int i=0;i<M;i++)
{
for(int j=0;j<M;j++)
{
if(matrix[i][j]==1 && !visited[i][j])
{
visited[i][j] = true;
num++;
helper(matrix, i, j, visited);
}
}
}
cout << num << endl;
}
return 0;
}
0.8很迷
同样的思路,我改成了c++就是ac
我第二题也一直0.8,说数组越界
5道题做对的加起来不超过两道,我是不是可以不用关注后续了。。。
我也是0.8,说数组越界,查了半天没越界啊
我也是4.8明显比第一次的简单
我之前也是四个方向,后来改成两个方向就ac了!因为你是从左上角开始遍历到右下角的,所以两个方向就可以了!
大佬可以发下代码吗,,学习一下
4.3
ak
题目说矩阵是M*M,但是测试用例有M*N的
相关推荐