博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
连通块
阅读量:4507 次
发布时间:2019-06-08

本文共 1402 字,大约阅读时间需要 4 分钟。

题目描述

为了增强幼儿园小朋友的数数能力,小虎的老师给了一个家庭游戏作业。让小虎拿一块空的围棋盘,随机的在一些方格中放些棋子(有黑白两种颜色),如果一个方格和它的上、下、左、右四个方格之一都有相同颜色的棋子,则认为两格子是相连通的。这期间,要求小虎不断统计共有多少个连通块。

如下图是一个5×9的一块棋盘,其中“.”表示空格,“×”表示黑棋子,“@”表示白棋子。则有4块连通的棋子块。

......... ..**..@.. .**@@.@@. ..*@..*.. .........

哥哥大虎在一边看一边想,如果棋盘是N×N的,共放了M个棋子,如何用计算机解决这个问题呢?

输入输出格式

输入格式:

第一行,两个整数,N,M;

接下来有M行,每行三个正整数:C、X、Y(0≤C≤1,1≤X,Y≤N)。分别表示依次放入棋子的颜色(0表示白色,1表示黑色)、要放入格子的横坐标和格子的纵坐标。

输出格式:

共M行。第i行一个整数,表示放入第i个棋子后,当前有多少个棋子连通块。

输入输出样例

输入样例一:
3 51 1 11 1 20 2 21 3 11 2 1
输出样例一:
11232
输入样例二:
3 51 1 21 2 11 3 21 2 31 2 2
输出样例二:
12341

说明

数据规模:

对于30%的数据,1≤N≤10;

对于60%的数据,1≤N≤100;

对于100%的数据,1≤N≤500,1≤M≤N×N。

 

思路:硬搜会超时,只需判断放置棋子的四周是否有同色棋子,如无则++。

#include
#include
using namespace std; int dx[4]={
1,0,-1,0},dy[4]={
0,1,0,-1};int col,n,m,x,y,ans,a[505][505],b[505][505]; bool dfs(int x,int y,int p){ if(x<1||x>n||y<1||y>n||b[x][y]==p||a[x][y]!=col)return false; b[x][y]=p; for(int i=0;i<4;i++)dfs(x+dx[i],y+dy[i],p); return true; }int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d%d%d",&col,&x,&y); col++; if(dfs(x+1,y,i))ans--; if(dfs(x-1,y,i))ans--; if(dfs(x,y+1,i))ans--; if(dfs(x,y-1,i))ans--; ans++; b[x][y]=i; a[x][y]=col; printf("%d\n",ans); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/2006hanziwei/p/10744156.html

你可能感兴趣的文章
[计算机网络] 一些应用对应的的应用层协议及传输层协议
查看>>
学习进度五
查看>>
【转】Git操作
查看>>
2014暑期最后一次个人赛
查看>>
●洛谷P1291 [SHOI2002]百事世界杯之旅
查看>>
软工网络15团队作业2——团队计划
查看>>
MySQL--创建用户
查看>>
isIos
查看>>
js+canvas实现滑动拼图验证码功能
查看>>
华为ensp工具栏丢失解决方法
查看>>
静态网页中的使得文字向上一直滚动,中间不间断。
查看>>
MySQL常见错误代码说明
查看>>
innobackupex 相关语法讲解【转】
查看>>
pt-table-sync同步报错Called not_in_left in state 0 at /usr/bin/pt-table-sync line 5231【原创】...
查看>>
jooq使用示例
查看>>
属性参数
查看>>
AQS独占式同步队列入队与出队
查看>>
修改原代码定制bootstrap
查看>>
idea快捷键
查看>>
shell——bash在线编辑
查看>>