在vs上能跑样例,在洛谷上不知道为啥编译失败,求大佬看看
查看原帖
在vs上能跑样例,在洛谷上不知道为啥编译失败,求大佬看看
1221266
amtuilasi楼主2024/1/16 15:22
#include<iostream>
using namespace std;


class graph
{
public:
	int vexnum, arcnum;
	int vexs[21];
	int arcs[21][21];
};


int n,maxx,path[21],cnt,ans[21];
graph G;
bool pos[21];

void CreatUDN(int n,graph& G)
{
	for (int i = 1; i <= n; i++)
	{
		cin >> G.vexs[i];
	}

	for (int i = 1; i < n; i++)
	{
		for (int j = i + 1; j <= n; j++)
		{
			cin >> G.arcs[i][j];
		}
	}
}


bool check(int x)
{
	for (int i = 1; i <= n; i++)
	{
		if (G.arcs[x][i] && !pos[i])return false;
	}
	return true;
}

void dfs(int x,int step,int sum)//x记录当前位置 step记录走过的路径
{
	if (check(x))
	{
		if (maxx < sum)
		{
			maxx = sum;
			cnt = step;
			for (int i = 1; i <= step; i++)
			{
				ans[i] = path[i];
			}
		}
		return;
	}
	else
	{
		for (int i = 1; i <= n; i++)
		{
			if (G.arcs[x][i] && !pos[i])
			{
				pos[i] = true;
				path[step + 1] = i;
				dfs(i, step + 1, sum + G.vexs[i]);
				pos[i] = false;
			}
		}
	}

}

int main()
{
	cin >> n;
	memset(pos, false, sizeof(pos));
	CreatUDN(n, G);

	for (int i = 1; i <= n; i++)
	{
		pos[i] = true;
		path[1] = i;
		dfs(i, 1, G.vexs[i]);
		pos[i] = false;
	}

	for (int i = 1; i <= cnt; i++)
	{
		cout << ans[i] << " ";
	}
	cout << endl;
	cout << maxx;
	return 0;
}
2024/1/16 15:22
加载中...