zoukankan      html  css  js  c++  java
  • XDOJ1327

    XDOJ1327

    题目描述

    第七兽分为四个亚种,我们把它们记为 A, B, C, D。每只兽需要至少一个格子作为自己的领地。如果两只相邻的兽是一个亚种的,它们会融合成一只兽,这只兽将会占据以前两只兽的领地。 
    珂朵莉想问威廉,在一个 n * m 的 铺满第七兽的四个亚种 的矩形里面,到底有多少只第七兽的四个亚种。

    输入

    第一行包括两个数 n, m, 表示这个矩形的大小。 
    剩下行描述了这个矩形内兽的分布情况。

    输出

    输出一行四个数,表示第七兽 亚种 A, B, C, D 的个数,每两个数之间有一个空格。

    样例输入

    4 7
    DDDDDDD
    DABABAD
    DBACACD
    DDDDDDD

    样例输出

    5 3 2 1

    示例代码

    #include <iostream>
    #include <cstring>
    #define N 55
    using namespace std;
    char data[N][N];
    void dfs(int x,int y,char s)
    {
    	if(data[x][y]==s)
    	{
    		data[x][y] = 'E';
    		dfs(x+1,y,s);
    		dfs(x-1,y,s);
    		dfs(x,y+1,s);
    		dfs(x,y-1,s);
    	}
    }
    int main()
    {
    	int m,n;
        cin >> m >> n;
        int resu = 0;
        memset(data,0,sizeof(data));
        for(int i = 1 ; i <= m ;i++)
        	for(int j = 1 ; j <=n ;j++)		cin >>data[i][j];
        for(int i = 1 ; i <= m ;i++)
        	for(int j = 1 ; j <=n ;j++)		if(data[i][j]=='A') dfs(i,j,'A'),resu++;
    		cout << resu << " ";
    	resu  = 0;
    	for(int i = 1 ; i <= m ;i++)
        	for(int j = 1 ; j <=n ;j++)		if(data[i][j]=='B') dfs(i,j,'B'),resu++;
    		cout << resu << " ";
    	resu  = 0;
    	for(int i = 1 ; i <= m ;i++)
        	for(int j = 1 ; j <=n ;j++)		if(data[i][j]=='C') dfs(i,j,'C'),resu++;
    		cout << resu << " ";
    	resu  = 0;
    	for(int i = 1 ; i <= m ;i++)
        	for(int j = 1 ; j <=n ;j++)		if(data[i][j]=='D') dfs(i,j,'D'),resu++;
    		cout << resu ;	
    	return 0;
    }

    总结

    笔者的代码通常长度上比较短,而且没有无用头文件,总体来说,这道题是一道比较常见的dfs,这道题据说用队列写也很简单,笔者有空尝试一下,稍后代码附上。

    PS:这倒是暑训签到题,题号为B,笔者会尽力在8.1前完成其他题解。

    透过泪水看到希望
  • 相关阅读:
    angular11源码探索十四[表单校验器]
    2020年终总结
    vue使用腾讯地图获取当前位置
    腾讯地图+element-ui 实现地址搜索标记功能
    腾讯地图SDK公交路线规划Demo2
    腾讯地图SDK公交路线规划Demo
    腾讯位置服务地图SDK自定义路况和字体
    腾讯地图SDK自定义地图和路况
    3D地图的定时高亮和点击事件
    vue+腾讯地图 实现坐标拾取器功能
  • 原文地址:https://www.cnblogs.com/ronnielee/p/9495161.html
Copyright © 2011-2022 走看看