您的位置:首页 > 其它

hdu 1241

2015-07-17 20:00 309 查看
题意大致就是在一个矩阵中从从上下左右以及对角线八个方向找到最大的连续'@'

然后思路的话就直接各个点进行深搜,搜完一个点就用‘*’覆盖‘@’来避免重复搜索...
#include<iostream>
using namespace std;
int m,n;
char s[110][110];
int dr[8][2] = {{1,0},{-1,0},{1,1},{-1,-1},{0,1},{0,-1},{1,-1},{-1,1}};
void dfs(int i, int j)
{
int a,b;
for (int x=0; x<8; x++)
{
a = i + dr[x][0];
b = j + dr[x][1];
if (a>=0 && a<m && b>=0 && b<n && s[a][b]=='@')
{
s[a][b] = '*';
dfs(a,b);
}
}
}

int main()
{
while (cin>>m>>n)
{
int cnt = 0;
if (m==0 || n==0)
break;
getchar();
for (int i=0; i<m; i++)
{
for (int j=0; j<n; j++)
{
scanf("%c",&s[i][j]);
}
getchar();
}
for (int i=0; i<m; i++)
{
for (int j=0; j<n; j++)
{
if (s[i][j] == '@')
{
s[i][j] = '*';
cnt++;
dfs(i,j);
}
}
}
cout<<cnt<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: