第五个caseTLE了求助
  • 板块P1162 填涂颜色
  • 楼主nob_lz
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/21 19:20
  • 上次更新2024/10/21 20:31:43
查看原帖
第五个caseTLE了求助
1416590
nob_lz楼主2024/10/21 19:20
#include<bits/stdc++.h>
using namespace std;

int n;
int a[50][50];
bool vis[50][50];
int dy[50];

bool edge(int x,int y){
    if(x<0 || x>=n || y<0 || y>=n) return false;
    return true;
}

void cut(){
    for(int i=0;i<n;++i){
        for(int j=0;j<n;++j){
                if(a[i][j]==1) dy[i]++;       
            }
        }
    }

bool dfs(int x,int y){
    if(!edge(x,y))
        return false;
    if(a[x][y]==1) return true;
    if(vis[x][y]) return true;
    vis[x][y]=true;

    if(dfs(x+1,y) && dfs(x-1,y) && dfs(x,y+1) && dfs(x,y-1)){
        vis[x][y]=false;
        return true;
    }
    else{
       vis[x][y]=false;
       return false;
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin>>n;
    for(int i=0;i<n;++i){
        for(int j=0;j<n;++j) 
            cin>>a[i][j];
    }
    cut();
    for(int i=0;i<n;++i){
        for(int j=0;j<n;++j){
            if(dy[i]>=2 && a[i][j]==0 && j!=0 && i!=0 && j!=n-1 && i!=n-1 && dfs(i,j) ) cout<<2<<' ';
            else 
            cout<<a[i][j]<<' ';
        }
       cout<<endl;
    }
    
    return 0;
}

我的思路是: 将符合情况的坐标进行dfs搜索,如果搜索到四个方向全是墙壁的话,就返回true, 不知道为啥第五个案例TLE了是不是因为什么没有剪枝叶什么的导致的 还是我的代码本身有问题?求助!!

2024/10/21 19:20
加载中...