#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了是不是因为什么没有剪枝叶什么的导致的 还是我的代码本身有问题?求助!!