题目描述
输入格式
输出格式
样例
逐层暴搜,注意回溯
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=300+10,Inf=0x3f3f3f3f; int n,p,x,y,ans,tot,c[maxn],sum[maxn],son[maxn][maxn]; bool vis[maxn]; vector<int> v[maxn]; void Build(int i) { vis[i]=1; for(int j=0;j<v[i].size();j++) { int temp=v[i][j]; if(!vis[temp]) { son[i][++sum[i]]=temp; Build(temp); } } } void dfs(int x) { int get=0; if(ans<=tot) return; for(int i=1;i<=n;i++) { if(c[i]==x) { for(int j=1;j<=sum[i];j++) { get=1; tot++; c[son[i][j]]=x+1; } } } tot--; for(int i=1;i<=n;i++) { if(c[i]==x+1) { c[i]=0; dfs(x+1); c[i]=x+1; } } tot++; for(int i=1;i<=n;i++) { if(c[i]==x+1) { c[i]=0; tot--; } } if(get==0) { ans=min(ans,tot); return; } } int main() { scanf("%d%d",&n,&p); c[1]=1; for(int i=1;i<=p;i++) { scanf("%d%d",&x,&y); v[x].push_back(y); v[y].push_back(x); } ans=Inf,tot=1; Build(1); dfs(1); printf("%d",ans); return 0; }
eafe、
https://blog.csdn.net/cax1165/article/details/52684717
https://blog.csdn.net/wyxeainn/article/details/57087108
Bill的挑战:https://blog.csdn.net/qq_37759040/article/details/77133246