Oil Deposits

又到了水题的时候了
这次分别用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;
 }

未来会更正~

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值