萌新求助搜索题loj AC,洛谷wa
  • 板块灌水区
  • 楼主cymlovedc
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/9/9 22:14
  • 上次更新2023/10/27 12:10:45
查看原帖
萌新求助搜索题loj AC,洛谷wa
454842
cymlovedc楼主2022/9/9 22:14

题目

第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;
}
2022/9/9 22:14
加载中...