又到了水题的时候了
这次分别用c和c++写了两个,很奇怪
用c写的最后结果出错了
有待改正。。。。等哪天找个大神来帮我吧
下来是c++解法
#include <iostream>
#include <stdio.h>
using namespace std;
char map[101][101];
int n, m, a[100],t=0;
void dfs(int i, int j)
{
if (map[i][j] != '@' || i < 0 || j < 0 || i >= m || j >= n)
{
return;
}
else
{
map[i][j] = '!';
dfs(i - 1, j - 1);
dfs(i - 1, j);
dfs(i - 1, j + 1);
dfs(i, j - 1);
dfs(i, j + 1);
dfs(i + 1, j - 1);
dfs(i + 1, j);
dfs(i + 1, j + 1);
}
}
int main()
{
int i, j;
while (cin >> m >> n)
{
if (m == 0 || n == 0)
{
break;
}
a[t] = 0;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
{
cin >> map[i][j];
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if (map[i][j] == '@')
{
dfs(i, j);
a[t]++;
}
}
}
t++;
}
for(i=0;i<t;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
下来是c的解法可惜错了
#include<stdio.h>
#define N 100
int a[N] ;
char b[100][100];
int i, j, k, n, m, t = 0;
void dfs(int i, int j )
{
if (b[i][j] != '@' || i < 0 || j > 0 || i >= m || j >= n)
{
return ;
}
else
{
b[i][j] = '!';
dfs(i-1, j-1);
dfs(i-1,j);
dfs(i-1,j+1);
dfs(i, j-1);
dfs(i, j + 1);
dfs(i + 1, j);
dfs(i + 1, j - 1);
dfs(i + 1, j + 1);
}
}
int main()
{
scanf("%d%d", &m, &n);
k = getchar();
while (m && n)
{
a[t]=0;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%c", &b[i][j]);
}
k = getchar();
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if (b[i][j] == '@')
{
dfs(i, j);
a[t]++;
}
}
}
t++;
scanf("%d%d",&m,&n);
}
for (i = 0; i < t; i++)
{
printf("%d\n", a[i]);
}
return 0;
}
未来会更正~