第10个点wa了
代码:
#include<bits/stdc++.h>
#define gc getchar
#define F(i, a, b) for(int i(a);i <= b;i ++)
#define F2(i, a, b) for(int i(a)i >= b;i --)
#define max(x,y) x>y?x:y
#define min(x,y) x>y?y:x
#define lowb(x) (x&(-x))
using namespace std;
typedef long long ll;
typedef double db;
const int N = 5, inf = 0x3f3f3f3f;
const db eps = 1e-7;
char s[N][N], t[N][N], arrs[N][2], arrt[N][2], top1, top2, ans = inf, used[N*N];//arrs存的是初始状态是1末态是0的点,arrt反之
inline void dfs(int cur, int step)
{
if(step > ans)
return ;
if(cur > top1)
{
ans = min(ans, step);
return ;
}
for(int i = 1;i <= top2;i ++)
{
if(!used[i])
{
used[i] = 1;
dfs(cur + 1, step + abs(arrs[cur][0] - arrt[i][0]) + abs(arrs[cur][1] - arrt[i][1]));
used[i] = 0;
}
}
}
signed main()
{
for(int i = 1;i <= 4;i ++)
scanf("%s",s[i] + 1);
for(int i = 1;i <= 4;i ++)
{
scanf("\n%s",t[i] + 1);
for(int j = 1;j <= 4;j ++)
{
if(s[i][j] == t[i][j])
continue;
if(t[i][j] < s[i][j])
arrs[++ top1][0] = i, arrs[top1][1] = j;
else
arrt[++ top2][0] = i, arrt[top2][1] = j;
}
}
dfs(1, 0);
printf("%d",ans);
return 0;
}