求助,深搜出大问题
  • 板块灌水区
  • 楼主fangzichang
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/5/15 09:05
  • 上次更新2023/10/28 01:24:54
查看原帖
求助,深搜出大问题
678087
fangzichang楼主2022/5/15 09:05

原题链接

对着下面这一坨代码思考了一上午

#include<bits/stdc++.h>
//#pragma GCC optimize(2)
using namespace std;
const int N=1010;
int n,m,ans,cnt,mj[N],bh[N][N];
bool f[N][N],vis[N][N],fl[N*N];
//bh是[i][j]所在的房间编号,cnt当前是第几个房间,mj[i]房间编号x的房间的面积,fl用于判重
string x;
void dfs(int i,int j){
	bh[i][j]=cnt;
	//四个方向深搜
	if(f[i+1][j]==1&&i+1<=n&&!vis[i+1][j])
	{
		mj[cnt]++;
		vis[i+1][j]=1;
		dfs(i+1,j);
	}
	if(f[i][j+1]==1&&j+1<=m&&!vis[i][j+1])
	{
		mj[cnt]++;
		vis[i][j+1]=1;
		dfs(i,j+1);
	}
	if(f[i-1][j]==1&&i-1>0&&!vis[i-1][j])
	{
		mj[cnt]++;
		vis[i-1][j]=1;
		dfs(i-1,j);
	}	
	if(f[i][j-1]==1&&j-1>0&&!vis[i][j-1])
	{
		mj[cnt]++;
		vis[i][j-1]=1;
		dfs(i,j-1);
	}	
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>x;
		for(int j=0;j<m;j++){
			if(x[j]=='.') f[i][j+1]=1;
			else {f[i][j+1]=0;bh[i][j+1]=0;}
			//不想判断字符
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++)
		{
			if(!vis[i][j]&&f[i][j]){
				cnt++;
				mj[cnt]++;
				vis[i][j]=1;
				dfs(i,j);
			}
		}
	}
	/*
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout<<bh[i][j]<<" ";
		}
		cout<<endl;
	}
	cout<<endl;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout<<mj[bh[i][j]]<<" ";
		}
		cout<<endl;
	}
	cout<<endl;
	*/
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			ans=1;//至少有自己
			if(f[i][j]==0)
			{
			    //四个方向查找,如果不是加过的房间就加上这个房间的面积
				if(f[i+1][j]&&i+1<=n){
					ans+=mj[bh[i+1][j]];
					fl[bh[i+1][j]]=1;
				}
				if(f[i-1][j]&&i-1>0&&!fl[bh[i-1][j]]){
					ans+=mj[bh[i-1][j]];
					fl[bh[i-1][j]]=1;
				}
				if(f[i][j+1]&&j+1<=m&&!fl[bh[i][j+1]]){
					ans+=mj[bh[i][j+1]];
					fl[bh[i][j+1]]=1;
				}
				if(f[i][j-1]&&j-1>0&&!fl[bh[i][j-1]]){
					ans+=mj[bh[i][j-1]];
				}
				ans%=10;
				printf("%d",ans);
				fl[bh[i+1][j]]=fl[bh[i-1][j]]=fl[bh[i][j+1]]=0;
			}
			else cout<<'.';
		}
		puts("");
	}
	return 0;
}

样例的小数据都过去了,但是后面出现了wa,,,

大概是算法写的问题

求助诸位神犇(双手合十)

2022/5/15 09:05
加载中...