HDU 1241 Oil Deposits

题目地址:点击打开链接

思路: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;
}



你可能感兴趣的:(HDU 1241 Oil Deposits)