352 The Seasonal War

#include<iostream>

#include<queue>

#include<stdlib.h>

using namespace std;

 

#define M  30

 

char flag[M][M];

char war[M][M];

int num;

 

typedef struct

{

int x;

int y;

}point;

 

queue <point> myqueue;

 

void input()

{

cin>>num;

for(int i=0; i<num; i++)

for(int j=0; j<num; j++)

{

cin>>war[i][j];

}

}

 

int adj[16]={-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1};

 

bool out(int x,int y)

{

if(x<0||y<0||x>=num||y>=num)

return false;

return true;

}

 

void bfs()

{

int x,y,xx,yy;

point p;

while(!myqueue.empty())

{

p = myqueue.front();

x = p.x;

y = p.y;

for(int i=0; i<16; i+=2)

{

xx = x+adj[i];

yy = y+adj[i+1];

if(out(xx,yy)&&war[xx][yy]=='1')

{

p.x = xx;

p.y = yy;

myqueue.push(p);

war[xx][yy]='0';

}

}

myqueue.pop();

}

}

 

void solve(int &ans)

{

ans = 0;

point p;

 

for(int i=0; i<num; i++)

{

for(int j=0; j<num; j++)

{

if(war[i][j]=='1')

{

p.x = i;

p.y = j;

war[i][j]='0';

myqueue.push(p);

bfs();

ans++;

}

}

}

}

void output(int t_num,int ans)

{

cout<<"Image number "<<t_num<<" contains "<<ans<<" war eagles."<<endl;

}

int main()

{

int ans,t_num;

t_num = 0;

 

while(1)

{

t_num++;

memset(flag,0,sizeof(flag));

input(); 

if(cin.eof())

break;

solve(ans);

output(t_num,ans);

 

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值