60分求调!Thanks for helping me debug!
查看原帖
60分求调!Thanks for helping me debug!
715354
LCP99楼主2025/6/26 17:46
#include<bits/stdc++.h>
using namespace std;
int a[1010][1010];   // a[i][j] = 1 表示当前是荒地(非#),0表示杂物(#)
int a2[1010][1010];  // a2[i][j] = 1 表示原始输入是荒地(非#),0表示原始是杂物(#)
int main()
{
	int n,m;
	cin>>n>>m;
	char x;
	for(int i=0;i<=n+1;i++)     //循环范围i,j从0到n+1和m+1,覆盖网格外的边界(防止越界访问)
		for(int j=0;j<=m+1;j++)
			a[i][j]=1;
			
	for(int i=1;i<=n;i++)
	{
		
		for(int j=1;j<=m;j++)
		{
			cin>>x;
			if(x=='#')	a[i][j]=0;
			else	a2[i][j]=1;
		}
	}
	
	
	
	int maxn=0,h,l; 
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(a2[i][j]==0){// 处理原始是杂物的位置
				int k=0;
				if(a2[i-1][j]==1)	k++;
				if(a2[i+1][j]==1)	k++;
				if(a2[i][j-1]==1)	k++;
				if(a2[i][j+1]==1)	k++;
				if(k>maxn){
  					maxn=k;   // 不断选取最优解
					h=i;
					l=j;
				}
			}
	a[h][l]=1;
	int ans=0;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(a[i][j]==1)
				if(a[i-1][j]==1 && a[i+1][j]==1 && a[i][j-1]==1 && a[i][j+1]==1)
					ans++;  //统计开垦数量
	cout<<ans;
	return 0;
}

60分请求各位大神帮助,总觉得不对劲,但又查不出问题......码风过乱请各位大神谅解。感谢您的帮助!

2025/6/26 17:46
加载中...