來自洛谷p1451

#include<bits/stdc++.h>
using namespace std;
int n,m,sum;
bool b1[102][102];
struct o
{
string str;
}cell[101];
void dfs(int x,int y)
{
//cout<<b1[x][y]<<" "<<x<<" "<<y<<endl;
if(x>n||y>m||x<0||y<0)return;
if(b1[x][y])
{
b1[x][y]=0;
dfs(x+1,y);
dfs(x,y-1);
dfs(x-1,y);
dfs(x,y+1);
}
}
int main ()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>cell[i].str;
}
for(int i=0;i<n;i++)
{
for(int ii=0;ii<m;ii++)
{
if(cell[i].str[ii]!='0')
b1[i][ii]=1;
}
}
//int sum=0;
for(int i=0;i<n;i++)
{
for(int ii=0;ii<m;ii++)
{
if(b1[i][ii])
{
dfs(i,ii);
sum++;
//cout<<sum<<" rr"<<endl;
}
}
}
//dfs(0,0);
cout<<sum<<endl;
return 0;
}
先定義一個bool型陣列有數字的為真
沒有為假
然后每遇見的第一個數字(即細胞)sum++然后把臨近的數字全部歸零
再找第二個數字,注意不能越出陣列范圍,同時不要在遞回中定義陣列以防炸堆疊!
運行結果 
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/229171.html
標籤:其他
下一篇:局域網練習
