Neonen 2017-06-04 07:43 采纳率: 0%
浏览 1741

一道回溯题目,各位大神请用c++回答

描述
小 X 想要学游泳。 这天,小 X 来到了游泳池,发现游泳池可以用 N 行 M 列的格 来表示,每个格 的面积 都是 1,且格 内水深

相同。 由于小 X 刚刚入门,他只能在水深相同的地方游泳。为此,他把整个游泳池看成若干片 区域,如果两个格 相邻 (上下左右

四个方向)且水深相同,他就认为它们属于同一片区域。 小 X 想知道最大的一片区域面积是多少,希望你帮帮他。

输入
第一行包含用一个空格隔开的两个整数 N,M。 接下来 N 行,每行包含 M 个 1 到 9 的数字,表示每个格 的水深。

输出
第一行包含一个整数,表示最大的一片区域面积

样例输入 [复制]
3 3

124

224

152
样例输出 [复制]
3
提示
对于 30%的数据,1≤N,M≤3。 对于 60%的数据,1≤N,M≤10。 对于 100%的数据,1≤N,M≤100。

#include<bits/stdc++.h>
using namespace std;

char map1[105][105];
int s=1,maxs=0,way[105][105],n,m;
const int fx[4]={-1,0,1,0};
const int fy[4]={0,1,0,-1};

void dfs(int xx,int yy)
{
    int x,y;
    for(int i=0;i<4;i++)
    {
        way[xx][yy]=1;
        x=xx;
        y=yy;
        x=x+fx[i];
        y=y+fy[i];
        if(x>=1&&x<=n&&y>=1&&y<=m&&way[x][y]!=1&&map1[x][y]==map1[xx][yy])
        {
            s++;
            dfs(x,y);
        }
    }
    way[xx][yy]=0;
}

int main()
{
    freopen("swim.in","r",stdin);
    memset(way,0,sizeof(way));
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>map1[i][j];

    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            dfs(i,j);
            if(maxs<s) maxs=s;
                s=1;
        }
    printf("%d",maxs);
    return 0;
}

这是本人拙劣的代码

  • 写回答

2条回答 默认 最新

  • threenewbee 2017-06-04 18:01
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿