萌新求代码查错!
查看原帖
萌新求代码查错!
135156
wxzhengyueke楼主2020/11/4 13:53

求大佬,光枚举就有问题了..

#include<bits/stdc++.h>
using namespace std;
#define Maxn 100010
int n,m,u1,v1,jd1[2010],jd[2020],tot,head[2010];
inline int read()
{
	int x=0;char s=getchar();
	while(!isdigit(s))s=getchar();
	while(isdigit(s))x=(x<<1)+(x<<3)+(s^48),s=getchar();
	return x;
}
struct edge{int to,w,nxt;
}e[Maxn<<1];
inline void addedge(int u,int v){
	e[++tot]=(edge){v,head[u]};head[u]=tot;
}
long long ans=0,anss=2147483647,zht[10]={0,1,2,3,4,5,6,7,8,9},bia[10],bib[10];

int main()
{
	n=read();
	//m=read();
	for(int i=1;i<=n;i++)jd[i]=read();
	for(int i=1;i<=n;i++)jd1[jd[i]]=i;
	for(int i=1;i<=n;i++)cout<<jd1[i];//每个节点上的数 
	for(int i=1;i<=n-1;i++)u1=read(),v1=read(),bia[i]=u1,bib[i]=v1,addedge(u1,v1),addedge(v1,u1);
	
	if(n<=10){
		//for(int i=1;i<=n-1;i++)e.to,bib[i]=e.u1=read(),v1=read(),addedge(u1,v1),addedge(v1,u1);
		
		
		do
		{//cout<<1;
		    for(int i=1;i<=n;i++)
			    jd[i]=jd1[i];
			for(int i=1;i<n;i++)
			{
				swap(jd[bia[zht[i]]],jd[bib[zht[i]]]);//交换两边上的数 
			    for(int i=1;i<=n;i++)
				cout<<i<<":"<<jd[i]<<" ";
				cout<<endl;
			}
			    for(int i=1;i<=n;i++)
			    ans=ans*10+(jd[i]-1);//状压 1-10换成0-9 
			anss=min(ans,anss);
			for(int i=1;i<n;i++)
			    cout<<zht[i]<<" ";
			    cout<<endl;
			for(int i=1;i<=n;i++)
			    cout<<jd[i]<<" ";
			cout<<endl;
			
			//5*4*3*2*1=120
			/*for(int i=n-1;i>=0;i--)
			    swap(jd[bia[zht[i]]],jd[bib[zht[i]]]);
			*/
			
			cout<<ans<<endl;
			
			ans=0;
		}while(next_permutation(zht+1,zht+n));
		
		cout<<anss;
		//还原还没有写 
		
		
		
	}
	return 0;
}
/*
5
2 1 3 5 4
1 3
1 4
2 4
4 5
*/
2020/11/4 13:53
加载中...