0
点赞
收藏
分享

微信扫一扫

HDU 1241 Oil Deposits

infgrad 2022-08-04 阅读 44


题目地址:​​点击打开链接​​

思路:DFS

AC代码:

#include<iostream>
using namespace std;
int m,n;
char lol[110][110];
int x[8]={-1,-1,-1,0,0,1,1,1};
int y[8]={-1,0,1,-1,1,-1,0,1};
void dfs(int a,int b)
{
lol[a][b]='*';
int i,newx,newy;
for(i=0;i<8;i++)
{
newx=a+x[i];
newy=b+y[i];
if(lol[newx][newy]=='@' && newx<m && newy<n && newx>=0 && newy>=0)
{
dfs(newx,newy);
}
}
}

int main()
{
int i,j,sum;
while(cin>>m>>n&&m)
{
sum=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>lol[i][j];
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(lol[i][j]=='@')
{
dfs(i,j);
sum++;
}
}
}
cout<<sum<<endl;
}
return 0;
}

AC代码2:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>

typedef long long ll;
using namespace std;

char map1[110][110];
int dir[8][2] = {{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}};
int n,m;

void dfs(int x,int y)
{
map1[x][y] = '*';
int i;
for(i=0; i<8; i++)
{
int newx = x + dir[i][0];
int newy = y + dir[i][1];
if(newx >= 0 && newx < n && newy >= 0 && newy < m && map1[newx][newy] == '@')
{
dfs(newx,newy);
}
}
}

int main()
{
int i,j;
while(scanf("%d%d",&n,&m))
{
getchar();
int sum = 0;
if(n == 0)
break;
for(i=0; i<n; i++)
{
//gets(map1[i]);用gets输入会错,不知道哪里错了
scanf("%s",map1[i]);
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(map1[i][j] == '@')
{
dfs(i,j);
sum++;
}
}
}
printf("%d\n",sum);
}
return 0;
}





举报

相关推荐

0 条评论