Steiner树(斯坦纳树):4个村庄坐落在欧⼏⾥得平⾯上⼀个单位正⽅形的4个
顶点上。要求⽤最短的公路⽹把它们连接起来,使得每对村庄之间都有⼀条连通
的路径。求这样⼀个⽹络。
提示:可以先考虑三个村庄的情况,然后扩展⾄四个村庄。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
#define N 15
const int INF=0x3f3f3f3f;
int dx[4]={
1,-1,0,0},dy[4]={
0,0,1,-1};
struct node{
int x,y,s;
node(){
}
node(int a,int b,int c){
x=a;y=b;s=c;}
}u,v;
int f[N][N][1<<10];
node pre[N][N][1<<10],pos[N];
int a[N][N],ans[N][N];
queue<node> q;bool inq[N][N];
void dfs(node i)
{
if(!i.x)return;
ans[i.x][i.y]=1;
node j=pre[i.x][i.y