注意memcpy的使用格式! 注意memcpy的使用格式! 注意memcpy的使用格式! 注意memcpy的使用格式!
重要的事情说四遍!!!!!!!!!!!!!!
memcpy(被赋值数组,模板数组,sizeof 模板数组)
代码
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,step=1e9;
int change[10];
int a[15][15],b[15][15];
int dx[5]={0,0,1,-1,0};
int dy[5]={1,-1,0,0,0};
void turn1(int x,int y)
{
if(a[x][y]==0)a[x][y]=1;
else a[x][y]=0;
}
void turn(int x,int y)
{
for(int i=0;i<5;i++)
{
int x1=x+dx[i];
int y1=y+dy[i];
if(x1>0&&x1<=5&&y1>0&&y1<=5)
{
turn1(x1,y1);
}
}
}
void dfs(int x)
{
if(x==6)
{
int cnt=0;
memcpy(a,b,sizeof b);
for(int i=1;i<=5;i++)
{
if(change[i]==1)
{
turn(1,i);
cnt++;
}
}
for(int i=2;i<=5;i++)
{
for(int j=1;j<=5;j++)
{
if(a[i-1][j]==0)
{
turn(i,j);
cnt++;
}
}
}
for(int i=1;i<=5;i++)
{
if(a[5][i]==0)cnt=15;
}
step=min(step,cnt);
return;
}
change[x]=0;
dfs(x+1);
change[x]=1;
dfs(x+1);
}
int main()
{
cin>>n;
while(n--)
{
step=1e9;
for(int i=1;i<=5;i++)
{
for(int j=1;j<=5;j++)
{
char c;
cin>>c;
a[i][j]=c-'0';
b[i][j]=a[i][j];
}
}
dfs(1);
if(step>6)cout<<-1<<endl;
else cout<<step<<endl;
}
return 0;
}
dfs和递推区别不大
dfs都来了 合理
爱了,终于找到dfs的了