Oil Deposits

来源:互联网 发布:测试英语词汇量的软件 编辑:程序博客网 时间:2024/06/06 14:16

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

未来会更正~

0 0
原创粉丝点击