0分求救
查看原帖
0分求救
1115386
dingxiangqian楼主2024/10/13 16:16
#include<iostream>
#include<algorithm>
using namespace std;
int a[50][50]/*房间对应的门*/;
int n,w[50],ans[500]/*最终路径存储*/,ans1[500]/*临时路径存储*/,maxq/*已知最多*/,maxm,m/*路径房间数*/;
bool l;
void dfs(int sum/*经过的房间总数*/,int num/*当前房间房间号*/,int q/*地雷数*/)
{
	l=false;
	if(sum==n+1)/*如果可以都走一遍*/ 
	{
		for(int i=1;i<=n;i++)
		{
			cout<<ans1[i]<<" ";
		}
		cout<<endl<<q;
		exit(0);
	 } 
	 for(int i=1;i<num;i++)
	 {
	 	if(a[num][i]==1)
	 	{
	 		l=true;
	 		ans1[num+1]=i;
	 		m++;
	 		dfs(sum+1,i+num,q+w[num+i]);

		 }
	 }
	 if(l==false)
	 {
		if(q>maxq)
		{
			for(int i=1;i<=m;i++)
			{
				ans[i]=ans1[i];
			}
			maxq=q;
			maxm=m;
		}
	m=1;
	     return;
	 }
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>w[i];
	}
	int k=1;
	for(int i=n-1;i>=1;i--)
	{
		for(int j=1;j<=i;j++)
		{
			cin>>a[k][j];
		}
		k++;
	}
	for(int i=1;i<=n;i++)
	{
		l=false;
		m=1; 
		ans1[1]=i;
		dfs(0,i,0);
	}
	for(int i=1;i<=maxm;i++)
	{
		cout<<ans[i]<<" ";
	}
	cout<<endl<<maxq;
	return 0;
	
}
2024/10/13 16:16
加载中...