标签:while 应该 ios print 解决 列表 distrib void eof
#include <iostream>
#include <cstdio>
using namespace std;
char Graph[100][100];
int h, w;
int Count=0; //代表区域的个数(初始化为0)
void dfs(int x, int y, char flag); //代表进行深度优先搜索的函数,其中flag代表要进行查找的果树类型
void dfs(int x, int y, char flag)
{
int movex, movey; //代表移动之后的坐标
int i, j;
Graph[x][y] = ‘.‘; //将搜索完之后的果树用.代替,免得被重复遍历到,最终影响题目结果
for (i = -1; i <= 1; i++)
{
for (j = -1; j <= 1; j++)
{
if (i == 0 || j == 0) //筛选四个方向(-1,0)(1,0)(0,-1)(0,1)
{
movex = x + i;
movey = y + j;
if (movex >= 0 && movex < h && movey >= 0 && movey < w && Graph[movex][movey] == flag)
{
dfs(movex, movey, flag); //继续向下进行深度优先搜索
}
}
}
}
}
int main()
{
int i, j;
char x;
while (scanf("%d %d", &h, &w) != EOF)
{
if (h == 0 && w == 0)
{
return 0;
}
else
{
for (i = 0; i < h; i++)
{
for (j = 0; j < w; j++)
{
cin >> x;
Graph[i][j] = x;
}
}
for (i = 0; i < h; i++)
{
for (j = 0; j < w; j++)
{
if (Graph[i][j] == ‘@‘) //查找苹果
{
dfs(i, j, ‘@‘); //以苹果为起点进行深度优先搜索
Count++; //查找完后,区域个数+1
}
else if (Graph[i][j] == ‘#‘) //查找梨
{
dfs(i, j, ‘#‘);
Count++;
}
else if (Graph[i][j] == ‘*‘) //查找蜜柑
{
dfs(i, j, ‘*‘);
Count++;
}
}
}
printf("%d\n", Count); //果树遍历完之后输出结果
Count = 0; //当一次测试实例运行完之后,我们要将区域个数清0,不然的话会影响下一次的结果
}
}
}
AOJ 0118 Property Distribution
标签:while 应该 ios print 解决 列表 distrib void eof
原文地址:https://www.cnblogs.com/gao79135/p/13992454.html