兔子递归 2022-07-19 20:09 采纳率: 80%
浏览 26
已结题

NOI / 2.5基本算法之搜索1817:城堡问题

请问该题代码哪里错了?

题目:


图1是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分割成m×n(m≤50,n≤50)个方块,每个方块可以有0~4面墙。

输入
程序从标准输入设备读入数据。第1、2行每行1个整数,分别是南北向、东西向的方块数。在接下来的输入行里,每个方块用一个数字(0≤p≤50)描述。用一个数字表示方块周围的墙,1表示西墙,2表示北墙,4表示东墙,8表示南墙。每个方块用代表其周围墙的数字之和表示。城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。输入的数据保证城堡至少有两个房间。
输出
输出2行,每行一个数,表示城堡的房间数、城堡中最大房间所包括的方块数。结果显示在标准输出设备上。

我的代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,a[55][55],t,s,v[55][55],msn=0,bit[4]={2,8,1,4};
void dfs(int x,int y)
{
    int i,dx[4]={-1,1,0,0},dy[4]={0,0,-1,1},tx,ty;
    for(i=0;i<=3;i++)
    {
        tx=x+dx[i];
        ty=y+dy[i];
        if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&(a[tx][ty]&bit[i])==0&&v[tx][ty]==0)
        {
            s++;
            v[tx][ty]=1;
            dfs(tx,ty);
        }
    }
}
int main()
{
    int i,j;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    cin>>a[i][j];
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    {
        
        if(v[i][j]==0)
        {
            t++;
            s=1;
            v[i][j]=1;
            dfs(i,j);
        if(s>msn)
        msn=s;
        }
    }
    cout<<t<<endl<<msn;
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 7月27日
    • 创建了问题 7月19日

    悬赏问题

    • ¥20 Html备忘录页面制作
    • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
    • ¥20 数学建模来解决我这个问题
    • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
    • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
    • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
    • ¥30 NIRfast软件使用指导
    • ¥20 matlab仿真问题,求功率谱密度
    • ¥15 求micropython modbus-RTU 从机的代码或库?
    • ¥15 django5安装失败