求大佬帮忙改进算法
查看原帖
求大佬帮忙改进算法
573963
wbh20090611楼主2024/6/3 20:10

算法:记忆化dfs+状态压缩

#include<bits/stdc++.h>
using namespace std;
int n, f[110][110], a[110][110], ans = INT_MAX, s[(1 << 20) + 5][21];
void dfs(int x, int k, int dis)
{
	s[k][x] = dis;
	if (k == (1 << n) - 1)
		ans = min(ans ,dis + a[x][1]);
	if (k == (1 << n) - 1)return;
	if(dis > ans)
		return;
	if(s[k ^ ((1 << n) - 1)][x] > 0)
	{
		ans = min(s[k ^ ((1 << n) - 1)][x] + dis, ans);
		return;
	}
	for(int i = 1; i <= n; i++)
	{
		if(i == x)
			continue;
		if(k & (1 << (i - 1)))
			continue;
		dfs(i, k | (1 << (i - 1)), dis + a[x][i]);
	}
}
int main()
{
	cin >> n;
	for(int i = 1; i <= n; i++)
		for(int j = 1; j <= n; j++)
			scanf("%d", a[i] + j);
	dfs(1, 0, 0);
	cout <<ans;
}
2024/6/3 20:10
加载中...