码迷,mamicode.com
首页 > 编程语言 > 详细

八连通(vector动态数组法)

时间:2019-05-26 12:42:40      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:space   div   bool   turn   pre   问题   好的   out   name   

题目和一般的八连通一样,但行数和列数未定,相乘对于1e6,直接开a[1e6][1e6]的数组肯定会爆内存。用二维的动态vector就能很好的解决这个问题

#include<bits/stdc++.h>
using namespace std;
int dx[10]={-1,0,1,-1,1,-1,0,1};
int dy[10]={1,1,1,0,0,-1,-1,-1};
int n,m;

void dfs(vector< vector < bool > >&a,int x,int y)
{
    a[x][y]=0;
    int X,Y;
    for(int i=0;i<8;i++)
    {
        X=x+dx[i];
        Y=y+dy[i];
        if(X>=0&&X<n&&Y>=0&&Y<m&&a[X][Y]==1)
        {
            dfs(a,X,Y);
        }
    }
    //return ;
}
int main()
{
int x,cnt=0;
cin>>n>>m;
//vector<vector<int> > a(n, vector<int>(m,0));
vector< vector<bool> >a(n);
for(int i=0;i<n;i++)
{
    a[i].resize(m);
}
for(int i=0;i<n;i++)
{
    for(int j=0;j<m;j++)
    {
    cin>>x;
    a[i][j]=x;
}
}
for(int i=0;i<n;i++)
{
    for(int j=0;j<m;j++)
    {
  if(a[i][j]==1)
  {
  dfs(a,i,j);
  cnt++;
}
}
}
cout<<cnt<<endl;
}

 

八连通(vector动态数组法)

标签:space   div   bool   turn   pre   问题   好的   out   name   

原文地址:https://www.cnblogs.com/hh13579/p/10925375.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!