求助自己的DFS为何RE,只能跑2步!
  • 板块学术版
  • 楼主husy
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/8/13 11:21
  • 上次更新2023/10/27 15:38:57
查看原帖
求助自己的DFS为何RE,只能跑2步!
484780
husy楼主2022/8/13 11:21
#include<bits/stdc++.h>
using namespace std;
int n,m;
int cnt=1e9+10;
int a[100010];
void dfs(int x,int y,int s[])
{
//	if(x==n+1)puts("***");
//printf("%d %d\n",x,y);
    int b[100010];
	for(int i=1;i<=n*m;i++)b[i]=s[i];
	if(x==(n+1)&&y==(m+1))
	{
//		puts("***");
		int ans=0;
		for(int i=1;i<=n*m;i++)ans+=(b[i]==1);
		cnt=min(ans,cnt);
		return ;
	}
    printf("%d %d\n",x,y);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)printf("%d",s[(i-1)*m+j]);
		puts("");
	}	
	puts("");
	dfs(x+1,y+1,b);
	for(int i=1;i<=n*m;i++)b[i]=s[i];
	for(int i=1;i<=m;i++)b[(x-1)*m+i]=1-b[(x-1)*m+i];
	dfs(x+1,y+1,b);
	for(int i=1;i<=n*m;i++)b[i]=s[i];
	for(int i=1;i<=n;i++)b[(i-1)*m+y]=1-b[(i-1)*m+y];
	dfs(x+1,y+1,b);
	for(int i=1;i<=n*m;i++)b[i]=s[i];
	for(int i=1;i<=m;i++)b[(x-1)*m+i]=1-b[(x-1)*m+i];
	for(int i=1;i<=n;i++)b[(i-1)*m+y]=1-b[(i-1)*m+y];
	dfs(x+1,y+1,b);
	return ;
}
int main()
{
	scanf("%d%d",&n,&m);
	char g[1001][1011];
	for(int i=1;i<=n;i++)scanf("%s",g[i]+1);
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
	{
		a[(i-1)*m+j]=g[i][j]-'0';
	}
//	for(int i=1;i<=n;i++)
//	{
//		for(int j=1;j<=m;j++)printf("%d",a[(i-1)*m+j]);
//		puts("");
//	}	
	dfs(1,1,a);
	printf("%d\n",cnt);
}

样例

10 10
0101001010
0110001011
1011001011
1011011001
0101101001
0111001011
1111010101
1111001100
0110011001
0011110100

2022/8/13 11:21
加载中...