很长时间没发博客了,今天水一下

很多dalao说染色(普通的)过不了,

我怎么就过了

其实我也是今天才知道什么是染色(由@你听风在吼 dalao指导)

然后自己打了一个,也不知道叫不叫染色,反正是过了

QAQ

这个类似连通块,我们把一整个连通块进行整体标记,每次不管访问哪一个成员,都可以直接输出已经存好的

不多说废话,上代码

#include<bits/stdc++.h>
using namespace std;
int b[1001][1001],c[1001];//b是标记哪个点是属于哪个染色区,c是每个染色区的连通块个数
char a[1001][1001];//a是矩阵
int xx[5] = {0,1,-1,0,0},yy[5] = {0,0,0,1,-1};
int n,m,tot,ku = 1;//tot是统计连通块的,ku是染色区的"名称"
void ss(int x,int y){
tot ++;
for(int i = 1;i <= 4;i++){
int x2 = x + xx[i],y2 = y + yy[i];
if(a[x][y] != a[x2][y2] && b[x2][y2] == 0 && x2 <= n && x2 > 0 && y2 <= n && y2 > 0 ){//这里要注意,染过的就不能再染了,想想为什么
b[x2][y2] = ku;//染色
ss(x2,y2);
}
}
return;
}
int main(int argc, char const *argv[])
{
cin>>n>>m;
for(int i = 1;i <= n;++i) scanf("%s",a[i]+1);
for (int i = 1; i <= n; ++i)
{
for(int j = 1;j <= n;++j){
if(b[i][j] == 0){
b[i][j] = ku;//起点也要染色
ss(i,j);
c[ku] = tot;
tot = 0;//清空
ku ++;//换一个连通块的名称
}
}
}
for(int i = 1;i <= m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
cout<<c[b[x][y]]<<endl;
}
return 0;
}

最新文章

  1. C++函数指针总结
  2. linux 常用命令
  3. sql 计算周围公里语句
  4. &lt;&lt;&lt; Google hack
  5. CSS 魔法系列:纯 CSS 绘制三角形(各种角度)
  6. Hibernate Spring
  7. C# in VS
  8. TCP/IP详解 笔记十
  9. 为EF DbContext生成的实体添加注释(T5模板应用)[转]
  10. JS之路——浏览器window对象
  11. 跟我开发NSP(网上查询平台):如何选择开发项目
  12. .Net 序列化和反序列化SerializerHelper
  13. SAS 评分卡开发模型变量统计及输出
  14. 微信小程序 wxml中的属性记录
  15. VLC在web系统中应用(x-vlc-plugin 即如何把VLC嵌入HTML中)第一篇
  16. VMware下 CentOS 连接外网问题(笔记)
  17. Java Web系列:Hibernate 基础
  18. 2019.04.11 第四次训练 【 2017 United Kingdom and Ireland Programming Contest】
  19. 16.并发容器之CopyOnWriteArrayList
  20. 全国Uber优步司机奖励政策 (12月28日-1月3日)

热门文章

  1. uoj #210. 【UER #6】寻找罪犯【2-SAT】
  2. 2014-7-17 NOIP模拟赛
  3. Git的使用方法与GitHub项目托管方法
  4. idea svn 问题
  5. 解决DDOS攻击生产案例
  6. Validation(4)-临时
  7. Java的理解
  8. 执行gulp build报错
  9. AtCoder Beginner Contest 053 ABCD题
  10. 计算机中如何实现除数是2的幂次的除法【转载自CSDN】